* @license MIT */ final class SignatureChecker implements SignatureCheckerInterface { /** * @var SignatureGeneratorInterface */ private $signatureGenerator; /** * @param SignatureGeneratorInterface $signatureGenerator */ public function __construct(SignatureGeneratorInterface $signatureGenerator) { $this->signatureGenerator = $signatureGenerator; } /** * {@inheritDoc} */ public function checkSignature(ReflectionClass $class, array $parameters) { $propertyName = 'signature' . $this->signatureGenerator->generateSignatureKey($parameters); $signature = $this->signatureGenerator->generateSignature($parameters); $defaultProperties = $class->getDefaultProperties(); if (! isset($defaultProperties[$propertyName])) { throw MissingSignatureException::fromMissingSignature($class, $parameters, $signature); } if ($defaultProperties[$propertyName] !== $signature) { throw InvalidSignatureException::fromInvalidSignature( $class, $parameters, $defaultProperties[$propertyName], $signature ); } } }