* SPDX-License-Identifier: MIT */ declare(strict_types=1); namespace Respect\Validation\Rules; use ReflectionException; use ReflectionProperty; use Respect\Validation\Validatable; use function is_object; use function property_exists; /** * Validates an object attribute, even private ones. * * @author Alexandre Gomes Gaigalas * @author Emmerson Siqueira * @author Henrique Moody */ final class Attribute extends AbstractRelated { public function __construct(string $reference, ?Validatable $rule = null, bool $mandatory = true) { parent::__construct($reference, $rule, $mandatory); } /** * {@inheritDoc} * * @throws ReflectionException */ public function getReferenceValue($input) { $propertyMirror = new ReflectionProperty($input, (string) $this->getReference()); if ($propertyMirror->isInitialized($input) === false) { return null; } return $propertyMirror->getValue($input); } /** * {@inheritDoc} */ public function hasReference($input): bool { return is_object($input) && property_exists($input, (string) $this->getReference()); } }