Verzeichnisstruktur phpBB-3.3.15
- Veröffentlicht
- 28.08.2024
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
AccessInterceptorScopeLocalizerGenerator.php
01 <?php
02
03 declare(strict_types=1);
04
05 namespace ProxyManager\ProxyGenerator;
06
07 use ProxyManager\Exception\InvalidProxiedClassException;
08 use ProxyManager\Generator\Util\ClassGeneratorUtils;
09 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 }
99