/** * Control flow below constructor * * @param Pointcut $pointcut Instance of pointcut, that will be used for matching * @throws \InvalidArgumentException if filter doesn't support methods */ public function __construct(Pointcut $pointcut) { $this->internalClassFilter = $pointcut->getClassFilter(); $this->internalPointFilter = $pointcut; if (!($this->internalPointFilter->getKind() & PointFilter::KIND_METHOD)) { throw new \InvalidArgumentException("Only method filters are valid for control flow"); } }
/** * Or constructor * * @param PointFilter $first First part of filter * @param PointFilter $second Second part of filter to match */ public function __construct(PointFilter $first, PointFilter $second) { $this->kind = $first->getKind() | $second->getKind(); $this->first = $first; $this->second = $second; }
/** * Returns list of advices from advisor and point filter * * @param ReflectionClass|ParsedReflectionClass $class Class to inject advices * @param Aop\PointcutAdvisor $advisor Advisor for class * @param string $advisorId Identifier of advisor * @param Aop\PointFilter $filter Filter for points * * @return array */ private function getAdvicesFromAdvisor($class, Aop\PointcutAdvisor $advisor, $advisorId, Aop\PointFilter $filter) { $classAdvices = array(); // Check methods in class only for method filters if ($filter->getKind() & Aop\PointFilter::KIND_METHOD) { $mask = ReflectionMethod::IS_PUBLIC | ReflectionMethod::IS_PROTECTED; foreach ($class->getMethods($mask) as $method) { /** @var $method ReflectionMethod| */ if ($filter->matches($method)) { $prefix = $method->isStatic() ? AspectContainer::STATIC_METHOD_PREFIX : AspectContainer::METHOD_PREFIX; $classAdvices[$prefix][$method->name][$advisorId] = $advisor->getAdvice(); } } } // Check properties in class only for property filters if ($filter->getKind() & Aop\PointFilter::KIND_PROPERTY) { $mask = ReflectionProperty::IS_PUBLIC | ReflectionProperty::IS_PROTECTED; foreach ($class->getProperties($mask) as $property) { /** @var $property ReflectionProperty */ if ($filter->matches($property)) { $classAdvices[AspectContainer::PROPERTY_PREFIX][$property->name][$advisorId] = $advisor->getAdvice(); } } } return $classAdvices; }
/** * Not constructor * * @param PointFilter $first First part of filter */ public function __construct(PointFilter $first) { $this->kind = $first->getKind(); $this->first = $first; }
/** * Returns list of advices from advisor and point filter * * @param ReflectionClass $class Class to inject advices * @param Aop\PointcutAdvisor $advisor Advisor for class * @param string $advisorId Identifier of advisor * @param Aop\PointFilter $filter Filter for points * * @return array */ private function getAdvicesFromAdvisor(ReflectionClass $class, Aop\PointcutAdvisor $advisor, $advisorId, Aop\PointFilter $filter) { $classAdvices = []; $filterKind = $filter->getKind(); // Check class only for class filters if ($filterKind & Aop\PointFilter::KIND_CLASS) { if ($filter->matches($class)) { // Dynamic initialization if ($filterKind & Aop\PointFilter::KIND_INIT) { $classAdvices[AspectContainer::INIT_PREFIX]['root'][$advisorId] = $advisor->getAdvice(); } // Static initalization if ($filterKind & Aop\PointFilter::KIND_STATIC_INIT) { $classAdvices[AspectContainer::STATIC_INIT_PREFIX]['root'][$advisorId] = $advisor->getAdvice(); } } } // Check methods in class only for method filters if ($filterKind & Aop\PointFilter::KIND_METHOD) { $mask = ReflectionMethod::IS_PUBLIC | ReflectionMethod::IS_PROTECTED; foreach ($class->getMethods($mask) as $method) { /** @var $method ReflectionMethod| */ if ($filter->matches($method)) { $prefix = $method->isStatic() ? AspectContainer::STATIC_METHOD_PREFIX : AspectContainer::METHOD_PREFIX; $classAdvices[$prefix][$method->name][$advisorId] = $advisor->getAdvice(); } } } // Check properties in class only for property filters if ($filterKind & Aop\PointFilter::KIND_PROPERTY) { $mask = ReflectionProperty::IS_PUBLIC | ReflectionProperty::IS_PROTECTED; foreach ($class->getProperties($mask) as $property) { /** @var $property ReflectionProperty */ if ($filter->matches($property) && !$property->isStatic()) { $classAdvices[AspectContainer::PROPERTY_PREFIX][$property->name][$advisorId] = $advisor->getAdvice(); } } } return $classAdvices; }