Verzeichnisstruktur phpBB-3.2.0
- Veröffentlicht
- 06.01.2017
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 |
AccessInterceptorValueHolderGenerator.php
001 <?php
002 /*
003 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
004 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
005 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
006 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
007 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
008 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
009 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
010 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
011 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
012 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
013 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
014 *
015 * This software consists of voluntary contributions made by many individuals
016 * and is licensed under the MIT license.
017 */
018
019 namespace ProxyManager\ProxyGenerator;
020
021 use ProxyManager\Generator\Util\ClassGeneratorUtils;
022 use ProxyManager\ProxyGenerator\AccessInterceptor\MethodGenerator\MagicWakeup;
023 use ProxyManager\ProxyGenerator\AccessInterceptor\MethodGenerator\SetMethodPrefixInterceptor;
024 use ProxyManager\ProxyGenerator\AccessInterceptor\MethodGenerator\SetMethodSuffixInterceptor;
025 use ProxyManager\ProxyGenerator\AccessInterceptor\PropertyGenerator\MethodPrefixInterceptors;
026 use ProxyManager\ProxyGenerator\AccessInterceptor\PropertyGenerator\MethodSuffixInterceptors;
027 use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\Constructor;
028 use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\InterceptedMethod;
029 use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\MagicClone;
030 use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\MagicGet;
031 use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\MagicIsset;
032 use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\MagicSet;
033 use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\MagicUnset;
034 use ProxyManager\ProxyGenerator\Assertion\CanProxyAssertion;
035 use ProxyManager\ProxyGenerator\LazyLoadingValueHolder\PropertyGenerator\ValueHolderProperty;
036 use ProxyManager\ProxyGenerator\PropertyGenerator\PublicPropertiesMap;
037 use ProxyManager\ProxyGenerator\Util\ProxiedMethodsFilter;
038 use ProxyManager\ProxyGenerator\ValueHolder\MethodGenerator\GetWrappedValueHolderValue;
039 use ProxyManager\ProxyGenerator\ValueHolder\MethodGenerator\MagicSleep;
040 use ReflectionClass;
041 use ReflectionMethod;
042 use Zend\Code\Generator\ClassGenerator;
043 use Zend\Code\Generator\MethodGenerator;
044 use Zend\Code\Reflection\MethodReflection;
045
046 /**
047 * Generator for proxies implementing {@see \ProxyManager\Proxy\ValueHolderInterface}
048 * and {@see \ProxyManager\Proxy\AccessInterceptorInterface}
049 *
050 * {@inheritDoc}
051 *
052 * @author Marco Pivetta <ocramius@gmail.com>
053 * @license MIT
054 */
055 class AccessInterceptorValueHolderGenerator implements ProxyGeneratorInterface
056 {
057 /**
058 * {@inheritDoc}
059 */
060 public function generate(ReflectionClass $originalClass, ClassGenerator $classGenerator)
061 {
062 CanProxyAssertion::assertClassCanBeProxied($originalClass);
063
064 $publicProperties = new PublicPropertiesMap($originalClass);
065 $interfaces = array(
066 'ProxyManager\\Proxy\\AccessInterceptorInterface',
067 'ProxyManager\\Proxy\\ValueHolderInterface',
068 );
069
070 if ($originalClass->isInterface()) {
071 $interfaces[] = $originalClass->getName();
072 } else {
073 $classGenerator->setExtendedClass($originalClass->getName());
074 }
075
076 $classGenerator->setImplementedInterfaces($interfaces);
077 $classGenerator->addPropertyFromGenerator($valueHolder = new ValueHolderProperty());
078 $classGenerator->addPropertyFromGenerator($prefixInterceptors = new MethodPrefixInterceptors());
079 $classGenerator->addPropertyFromGenerator($suffixInterceptors = new MethodSuffixInterceptors());
080 $classGenerator->addPropertyFromGenerator($publicProperties);
081
082 array_map(
083 function (MethodGenerator $generatedMethod) use ($originalClass, $classGenerator) {
084 ClassGeneratorUtils::addMethodIfNotFinal($originalClass, $classGenerator, $generatedMethod);
085 },
086 array_merge(
087 array_map(
088 function (ReflectionMethod $method) use ($prefixInterceptors, $suffixInterceptors, $valueHolder) {
089 return InterceptedMethod::generateMethod(
090 new MethodReflection($method->getDeclaringClass()->getName(), $method->getName()),
091 $valueHolder,
092 $prefixInterceptors,
093 $suffixInterceptors
094 );
095 },
096 ProxiedMethodsFilter::getProxiedMethods($originalClass)
097 ),
098 array(
099 new Constructor($originalClass, $valueHolder, $prefixInterceptors, $suffixInterceptors),
100 new GetWrappedValueHolderValue($valueHolder),
101 new SetMethodPrefixInterceptor($prefixInterceptors),
102 new SetMethodSuffixInterceptor($suffixInterceptors),
103 new MagicGet(
104 $originalClass,
105 $valueHolder,
106 $prefixInterceptors,
107 $suffixInterceptors,
108 $publicProperties
109 ),
110 new MagicSet(
111 $originalClass,
112 $valueHolder,
113 $prefixInterceptors,
114 $suffixInterceptors,
115 $publicProperties
116 ),
117 new MagicIsset(
118 $originalClass,
119 $valueHolder,
120 $prefixInterceptors,
121 $suffixInterceptors,
122 $publicProperties
123 ),
124 new MagicUnset(
125 $originalClass,
126 $valueHolder,
127 $prefixInterceptors,
128 $suffixInterceptors,
129 $publicProperties
130 ),
131 new MagicClone($originalClass, $valueHolder, $prefixInterceptors, $suffixInterceptors),
132 new MagicSleep($originalClass, $valueHolder),
133 new MagicWakeup($originalClass, $valueHolder),
134 )
135 )
136 );
137 }
138 }
139