Go\Core\AdviceMatcher::getAdvicesForClass PHP Method

getAdvicesForClass() public method

Return list of advices for class
public getAdvicesForClass ( ReflectionClas\ReflectionClass $class, array $advisors ) : array | Go\Aop\Advice[]
$class ReflectionClas\ReflectionClass Class to advise
$advisors array List of advisor to match
return array | Go\Aop\Advice[] List of advices for class
    public function getAdvicesForClass(ReflectionClass $class, array $advisors)
    {
        $classAdvices = [];
        $parentClass = $class->getParentClass();
        if ($parentClass && preg_match('/' . AspectContainer::AOP_PROXIED_SUFFIX . '$/', $parentClass->name)) {
            $originalClass = $parentClass;
        } else {
            $originalClass = $class;
        }
        foreach ($advisors as $advisorId => $advisor) {
            if ($advisor instanceof Aop\PointcutAdvisor) {
                $pointcut = $advisor->getPointcut();
                if ($pointcut->getClassFilter()->matches($class)) {
                    $classAdvices = array_merge_recursive($classAdvices, $this->getAdvicesFromAdvisor($originalClass, $advisor, $advisorId, $pointcut));
                }
            }
            if ($advisor instanceof Aop\IntroductionAdvisor) {
                if ($advisor->getClassFilter()->matches($class)) {
                    $classAdvices = array_merge_recursive($classAdvices, $this->getIntroductionFromAdvisor($originalClass, $advisor, $advisorId));
                }
            }
        }
        return $classAdvices;
    }

Usage Example

Beispiel #1
0
 /**
  * Check that list of advices for fields works correctly
  */
 public function testGetSinglePropertyAdviceForClassFromAdvisor()
 {
     $propName = 'adviceMatcher';
     // $this->adviceMatcher;
     $pointcut = $this->getMock(Pointcut::class);
     $pointcut->expects($this->any())->method('getClassFilter')->will($this->returnValue(TruePointFilter::getInstance()));
     $pointcut->expects($this->any())->method('matches')->will($this->returnCallback(function ($point) use($propName) {
         return $point->name === $propName;
     }));
     $pointcut->expects($this->any())->method('getKind')->will($this->returnValue(Pointcut::KIND_PROPERTY));
     $advice = $this->getMock(Advice::class);
     $advisor = new DefaultPointcutAdvisor($pointcut, $advice);
     $advices = $this->adviceMatcher->getAdvicesForClass($this->reflectionClass, array($advisor));
     $this->assertArrayHasKey(AspectContainer::PROPERTY_PREFIX, $advices);
     $this->assertArrayHasKey($propName, $advices[AspectContainer::PROPERTY_PREFIX]);
     $this->assertCount(1, $advices[AspectContainer::PROPERTY_PREFIX]);
 }
All Usage Examples Of Go\Core\AdviceMatcher::getAdvicesForClass