2015-08-17 17:00:26 -07:00
< ? 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 Symfony\Component\Validator\Mapping ;
use Symfony\Component\Validator\Constraint ;
use Symfony\Component\Validator\Exception\ConstraintDefinitionException ;
/**
* Stores all metadata needed for validating a class property .
*
* The method of accessing the property ' s value must be specified by subclasses
* by implementing the { @ link newReflectionMember ()} method .
*
* This class supports serialization and cloning .
*
* @ author Bernhard Schussek < bschussek @ gmail . com >
*
* @ see PropertyMetadataInterface
*/
2018-11-23 12:29:20 +00:00
abstract class MemberMetadata extends GenericMetadata implements PropertyMetadataInterface
2015-08-17 17:00:26 -07:00
{
/**
* @ internal This property is public in order to reduce the size of the
* class ' serialized representation . Do not access it . Use
* { @ link getClassName ()} instead .
*/
public $class ;
/**
* @ internal This property is public in order to reduce the size of the
* class ' serialized representation . Do not access it . Use
* { @ link getName ()} instead .
*/
public $name ;
/**
* @ internal This property is public in order to reduce the size of the
* class ' serialized representation . Do not access it . Use
* { @ link getPropertyName ()} instead .
*/
public $property ;
/**
* @ var \ReflectionMethod [] | \ReflectionProperty []
*/
private $reflMember = array ();
/**
* @ param string $class The name of the class this member is defined on
* @ param string $name The name of the member
* @ param string $property The property the member belongs to
*/
public function __construct ( $class , $name , $property )
{
$this -> class = $class ;
$this -> name = $name ;
$this -> property = $property ;
}
/**
* { @ inheritdoc }
*/
public function addConstraint ( Constraint $constraint )
{
2018-11-23 12:29:20 +00:00
if ( ! \in_array ( Constraint :: PROPERTY_CONSTRAINT , ( array ) $constraint -> getTargets ())) {
throw new ConstraintDefinitionException ( sprintf ( 'The constraint %s cannot be put on properties or getters' , \get_class ( $constraint )));
2015-08-17 17:00:26 -07:00
}
parent :: addConstraint ( $constraint );
return $this ;
}
/**
* { @ inheritdoc }
*/
public function __sleep ()
{
return array_merge ( parent :: __sleep (), array (
'class' ,
'name' ,
'property' ,
));
}
/**
* Returns the name of the member .
*
* @ return string
*/
public function getName ()
{
return $this -> name ;
}
/**
* { @ inheritdoc }
*/
public function getClassName ()
{
return $this -> class ;
}
/**
* { @ inheritdoc }
*/
public function getPropertyName ()
{
return $this -> property ;
}
/**
* Returns whether this member is public .
*
* @ param object | string $objectOrClassName The object or the class name
*
* @ return bool
*/
public function isPublic ( $objectOrClassName )
{
return $this -> getReflectionMember ( $objectOrClassName ) -> isPublic ();
}
/**
* Returns whether this member is protected .
*
* @ param object | string $objectOrClassName The object or the class name
*
* @ return bool
*/
public function isProtected ( $objectOrClassName )
{
return $this -> getReflectionMember ( $objectOrClassName ) -> isProtected ();
}
/**
* Returns whether this member is private .
*
* @ param object | string $objectOrClassName The object or the class name
*
* @ return bool
*/
public function isPrivate ( $objectOrClassName )
{
return $this -> getReflectionMember ( $objectOrClassName ) -> isPrivate ();
}
/**
* Returns the reflection instance for accessing the member ' s value .
*
* @ param object | string $objectOrClassName The object or the class name
*
* @ return \ReflectionMethod | \ReflectionProperty The reflection instance
*/
public function getReflectionMember ( $objectOrClassName )
{
2018-11-23 12:29:20 +00:00
$className = \is_string ( $objectOrClassName ) ? $objectOrClassName : \get_class ( $objectOrClassName );
2015-08-17 17:00:26 -07:00
if ( ! isset ( $this -> reflMember [ $className ])) {
$this -> reflMember [ $className ] = $this -> newReflectionMember ( $objectOrClassName );
}
return $this -> reflMember [ $className ];
}
/**
* Creates a new reflection instance for accessing the member ' s value .
*
* Must be implemented by subclasses .
*
* @ param object | string $objectOrClassName The object or the class name
*
* @ return \ReflectionMethod | \ReflectionProperty The reflection instance
*/
abstract protected function newReflectionMember ( $objectOrClassName );
}