isInterface()) { $interfaces[] = $originalClass->getName(); } else { $classGenerator->setExtendedClass($originalClass->getName()); } $classGenerator->setImplementedInterfaces($interfaces); $classGenerator->addPropertyFromGenerator($adapter = new AdapterProperty()); array_map( static function (MethodGenerator $generatedMethod) use ($originalClass, $classGenerator): void { ClassGeneratorUtils::addMethodIfNotFinal($originalClass, $classGenerator, $generatedMethod); }, array_merge( array_map( static function (ReflectionMethod $method) use ($adapter, $originalClass): RemoteObjectMethod { return RemoteObjectMethod::generateMethod( new MethodReflection($method->getDeclaringClass()->getName(), $method->getName()), $adapter, $originalClass ); }, ProxiedMethodsFilter::getProxiedMethods( $originalClass, ['__get', '__set', '__isset', '__unset'] ) ), [ new StaticProxyConstructor($originalClass, $adapter), new MagicGet($originalClass, $adapter), new MagicSet($originalClass, $adapter), new MagicIsset($originalClass, $adapter), new MagicUnset($originalClass, $adapter), ] ) ); } }