Файл: symfony-2.7/src/Symfony/Component/Validator/Mapping/Loader/StaticMethodLoader.php
Строк: 50
<?php
/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
namespace SymfonyComponentValidatorMappingLoader;
use SymfonyComponentValidatorExceptionMappingException;
use SymfonyComponentValidatorMappingClassMetadata;
class StaticMethodLoader implements LoaderInterface
{
    protected $methodName;
    public function __construct($methodName = 'loadValidatorMetadata')
    {
        $this->methodName = $methodName;
    }
    /**
     * {@inheritdoc}
     */
    public function loadClassMetadata(ClassMetadata $metadata)
    {
        /** @var ReflectionClass $reflClass */
        $reflClass = $metadata->getReflectionClass();
        if (!$reflClass->isInterface() && $reflClass->hasMethod($this->methodName)) {
            $reflMethod = $reflClass->getMethod($this->methodName);
            if ($reflMethod->isAbstract()) {
                return false;
            }
            if (!$reflMethod->isStatic()) {
                throw new MappingException(sprintf('The method %s::%s should be static', $reflClass->name, $this->methodName));
            }
            if ($reflMethod->getDeclaringClass()->name != $reflClass->name) {
                return false;
            }
            $reflMethod->invoke(null, $metadata);
            return true;
        }
        return false;
    }
}