* @author Marco Pivetta * @license MIT */ class StaticProxyConstructor extends MethodGenerator { /** * Constructor * * @param ReflectionClass $originalClass Reflection of the class to proxy * @param PropertyGenerator $adapter Adapter property */ public function __construct(ReflectionClass $originalClass, PropertyGenerator $adapter) { $adapterName = $adapter->getName(); parent::__construct( 'staticProxyConstructor', [new ParameterGenerator($adapterName, AdapterInterface::class)], MethodGenerator::FLAG_PUBLIC | MethodGenerator::FLAG_STATIC, null, 'Constructor for remote object control\n\n' . '@param \\ProxyManager\\Factory\\RemoteObject\\AdapterInterface \$adapter' ); $body = 'static $reflection;' . "\n\n" . '$reflection = $reflection ?? $reflection = new \ReflectionClass(__CLASS__);' . "\n" . '$instance = $reflection->newInstanceWithoutConstructor();' . "\n\n" . '$instance->' . $adapterName . ' = $' . $adapterName . ";\n\n" . UnsetPropertiesGenerator::generateSnippet(Properties::fromReflectionClass($originalClass), 'instance'); $this->setBody($body . "\n\nreturn \$instance;"); } }