Neos\Flow\Aop\Pointcut\PointcutMethodAnnotatedWithFilter::matches PHP Метод

matches() публичный Метод

Checks if the specified method matches with the method annotation filter pattern
public matches ( string $className, string $methodName, string $methodDeclaringClassName, mixed $pointcutQueryIdentifier ) : boolean
$className string Name of the class to check against - not used here
$methodName string Name of the method
$methodDeclaringClassName string Name of the class the method was originally declared in
$pointcutQueryIdentifier mixed Some identifier for this query - must at least differ from a previous identifier. Used for circular reference detection - not used here
Результат boolean TRUE if the class matches, otherwise FALSE
    public function matches($className, $methodName, $methodDeclaringClassName, $pointcutQueryIdentifier)
    {
        if ($methodDeclaringClassName === null || !method_exists($methodDeclaringClassName, $methodName)) {
            return false;
        }
        $designatedAnnotations = $this->reflectionService->getMethodAnnotations($methodDeclaringClassName, $methodName, $this->annotation);
        if ($designatedAnnotations !== [] || $this->annotationValueConstraints === []) {
            $matches = $designatedAnnotations !== [];
        } else {
            // It makes no sense to check property values for an annotation that is used multiple times, we shortcut and check the value against the first annotation found.
            $firstFoundAnnotation = $designatedAnnotations;
            $annotationProperties = $this->reflectionService->getClassPropertyNames($this->annotation);
            foreach ($this->annotationValueConstraints as $propertyName => $expectedValue) {
                if (!array_key_exists($propertyName, $annotationProperties)) {
                    $this->systemLogger->log('The property "' . $propertyName . '" declared in pointcut does not exist in annotation ' . $this->annotation, LOG_NOTICE);
                    return false;
                }
                if ($firstFoundAnnotation->{$propertyName} === $expectedValue) {
                    $matches = true;
                } else {
                    return false;
                }
            }
        }
        return $matches;
    }

Usage Example

 /**
  * @test
  */
 public function matchesReturnsFalseIfMethodDoesNotExistOrDeclardingClassHasNotBeenSpecified()
 {
     $mockReflectionService = $this->createMock(ReflectionService::class, [], [], '', false, true);
     $filter = new Aop\Pointcut\PointcutMethodAnnotatedWithFilter('Acme\\Some\\Annotation');
     $filter->injectReflectionService($mockReflectionService);
     $this->assertFalse($filter->matches(__CLASS__, __FUNCTION__, null, 1234));
     $this->assertFalse($filter->matches(__CLASS__, 'foo', __CLASS__, 1234));
 }