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 |
NullObjectGenerator.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\NullObjectInterface;
10 use ProxyManager\ProxyGenerator\Assertion\CanProxyAssertion;
11 use ProxyManager\ProxyGenerator\NullObject\MethodGenerator\NullObjectMethodInterceptor;
12 use ProxyManager\ProxyGenerator\NullObject\MethodGenerator\StaticProxyConstructor;
13 use ProxyManager\ProxyGenerator\Util\ProxiedMethodsFilter;
14 use ReflectionClass;
15 use Zend\Code\Generator\ClassGenerator;
16 use Zend\Code\Reflection\MethodReflection;
17
18 /**
19 * Generator for proxies implementing {@see \ProxyManager\Proxy\NullObjectInterface}
20 *
21 * {@inheritDoc}
22 *
23 * @author Vincent Blanchon <blanchon.vincent@gmail.com>
24 * @license MIT
25 */
26 class NullObjectGenerator implements ProxyGeneratorInterface
27 {
28 /**
29 * {@inheritDoc}
30 *
31 * @throws InvalidProxiedClassException
32 * @throws \Zend\Code\Generator\Exception\InvalidArgumentException
33 */
34 public function generate(ReflectionClass $originalClass, ClassGenerator $classGenerator)
35 {
36 CanProxyAssertion::assertClassCanBeProxied($originalClass);
37
38 $interfaces = [NullObjectInterface::class];
39
40 if ($originalClass->isInterface()) {
41 $interfaces[] = $originalClass->getName();
42 } else {
43 $classGenerator->setExtendedClass($originalClass->getName());
44 }
45
46 $classGenerator->setImplementedInterfaces($interfaces);
47
48 foreach (ProxiedMethodsFilter::getProxiedMethods($originalClass, []) as $method) {
49 $classGenerator->addMethodFromGenerator(
50 NullObjectMethodInterceptor::generateMethod(
51 new MethodReflection($method->getDeclaringClass()->getName(), $method->getName())
52 )
53 );
54 }
55
56 ClassGeneratorUtils::addMethodIfNotFinal(
57 $originalClass,
58 $classGenerator,
59 new StaticProxyConstructor($originalClass)
60 );
61 }
62 }
63