[ Index ] |
PHP Cross Reference of phpBB-3.3.14-deutsch |
[Summary view] [Print] [Text view]
1 <?php 2 3 declare(strict_types=1); 4 5 namespace ProxyManager\ProxyGenerator; 6 7 use ProxyManager\Exception\InvalidProxiedClassException; 8 use ProxyManager\Generator\Util\ClassGeneratorUtils; 9 use ProxyManager\Proxy\AccessInterceptorInterface; 10 use ProxyManager\ProxyGenerator\AccessInterceptor\MethodGenerator\SetMethodPrefixInterceptor; 11 use ProxyManager\ProxyGenerator\AccessInterceptor\MethodGenerator\SetMethodSuffixInterceptor; 12 use ProxyManager\ProxyGenerator\AccessInterceptor\PropertyGenerator\MethodPrefixInterceptors; 13 use ProxyManager\ProxyGenerator\AccessInterceptor\PropertyGenerator\MethodSuffixInterceptors; 14 use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\BindProxyProperties; 15 use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\InterceptedMethod; 16 use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\MagicClone; 17 use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\MagicGet; 18 use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\MagicIsset; 19 use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\MagicSet; 20 use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\MagicSleep; 21 use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\MagicUnset; 22 use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\StaticProxyConstructor; 23 use ProxyManager\ProxyGenerator\Assertion\CanProxyAssertion; 24 use ProxyManager\ProxyGenerator\Util\ProxiedMethodsFilter; 25 use ReflectionClass; 26 use ReflectionMethod; 27 use Zend\Code\Generator\ClassGenerator; 28 use Zend\Code\Generator\MethodGenerator; 29 use Zend\Code\Reflection\MethodReflection; 30 31 /** 32 * Generator for proxies implementing {@see \ProxyManager\Proxy\ValueHolderInterface} 33 * and localizing scope of the proxied object at instantiation 34 * 35 * {@inheritDoc} 36 * 37 * @author Marco Pivetta <ocramius@gmail.com> 38 * @license MIT 39 */ 40 class AccessInterceptorScopeLocalizerGenerator implements ProxyGeneratorInterface 41 { 42 /** 43 * {@inheritDoc} 44 * 45 * @throws \InvalidArgumentException 46 * @throws InvalidProxiedClassException 47 * @throws \Zend\Code\Generator\Exception\InvalidArgumentException 48 */ 49 public function generate(ReflectionClass $originalClass, ClassGenerator $classGenerator) 50 { 51 CanProxyAssertion::assertClassCanBeProxied($originalClass, false); 52 53 $classGenerator->setExtendedClass($originalClass->getName()); 54 $classGenerator->setImplementedInterfaces([AccessInterceptorInterface::class]); 55 $classGenerator->addPropertyFromGenerator($prefixInterceptors = new MethodPrefixInterceptors()); 56 $classGenerator->addPropertyFromGenerator($suffixInterceptors = new MethodSuffixInterceptors()); 57 58 array_map( 59 function (MethodGenerator $generatedMethod) use ($originalClass, $classGenerator) { 60 ClassGeneratorUtils::addMethodIfNotFinal($originalClass, $classGenerator, $generatedMethod); 61 }, 62 array_merge( 63 array_map( 64 $this->buildMethodInterceptor($prefixInterceptors, $suffixInterceptors), 65 ProxiedMethodsFilter::getProxiedMethods( 66 $originalClass, 67 ['__get', '__set', '__isset', '__unset', '__clone', '__sleep'] 68 ) 69 ), 70 [ 71 new StaticProxyConstructor($originalClass), 72 new BindProxyProperties($originalClass, $prefixInterceptors, $suffixInterceptors), 73 new SetMethodPrefixInterceptor($prefixInterceptors), 74 new SetMethodSuffixInterceptor($suffixInterceptors), 75 new MagicGet($originalClass, $prefixInterceptors, $suffixInterceptors), 76 new MagicSet($originalClass, $prefixInterceptors, $suffixInterceptors), 77 new MagicIsset($originalClass, $prefixInterceptors, $suffixInterceptors), 78 new MagicUnset($originalClass, $prefixInterceptors, $suffixInterceptors), 79 new MagicSleep($originalClass, $prefixInterceptors, $suffixInterceptors), 80 new MagicClone($originalClass, $prefixInterceptors, $suffixInterceptors), 81 ] 82 ) 83 ); 84 } 85 86 private function buildMethodInterceptor( 87 MethodPrefixInterceptors $prefixInterceptors, 88 MethodSuffixInterceptors $suffixInterceptors 89 ) : callable { 90 return function (ReflectionMethod $method) use ($prefixInterceptors, $suffixInterceptors) : InterceptedMethod { 91 return InterceptedMethod::generateMethod( 92 new MethodReflection($method->getDeclaringClass()->getName(), $method->getName()), 93 $prefixInterceptors, 94 $suffixInterceptors 95 ); 96 }; 97 } 98 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Mon Nov 25 19:05:08 2024 | Cross-referenced by PHPXref 0.7.1 |