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\Serializer\Mapping ;
/**
* { @ inheritdoc }
*
* @ author Kévin Dunglas < dunglas @ gmail . com >
*/
class ClassMetadata implements ClassMetadataInterface
{
/**
* @ var string
*
* @ 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 ;
/**
* @ var AttributeMetadataInterface []
*
* @ internal This property is public in order to reduce the size of the
* class ' serialized representation . Do not access it . Use
* { @ link getAttributesMetadata ()} instead .
*/
public $attributesMetadata = array ();
/**
* @ var \ReflectionClass
*/
private $reflClass ;
/**
* Constructs a metadata for the given class .
*
* @ param string $class
*/
public function __construct ( $class )
{
$this -> name = $class ;
}
/**
* { @ inheritdoc }
*/
public function getName ()
{
return $this -> name ;
}
/**
* { @ inheritdoc }
*/
public function addAttributeMetadata ( AttributeMetadataInterface $attributeMetadata )
{
$this -> attributesMetadata [ $attributeMetadata -> getName ()] = $attributeMetadata ;
}
/**
* { @ inheritdoc }
*/
public function getAttributesMetadata ()
{
return $this -> attributesMetadata ;
}
/**
* { @ inheritdoc }
*/
public function merge ( ClassMetadataInterface $classMetadata )
{
foreach ( $classMetadata -> getAttributesMetadata () as $attributeMetadata ) {
if ( isset ( $this -> attributesMetadata [ $attributeMetadata -> getName ()])) {
$this -> attributesMetadata [ $attributeMetadata -> getName ()] -> merge ( $attributeMetadata );
} else {
$this -> addAttributeMetadata ( $attributeMetadata );
}
}
}
/**
* { @ inheritdoc }
*/
public function getReflectionClass ()
{
if ( ! $this -> reflClass ) {
$this -> reflClass = new \ReflectionClass ( $this -> getName ());
}
return $this -> reflClass ;
}
/**
* Returns the names of the properties that should be serialized .
*
* @ return string []
*/
public function __sleep ()
{
return array (
'name' ,
2015-08-27 12:03:05 -07:00
'attributesMetadata' ,
2015-08-17 17:00:26 -07:00
);
}
}