|
@@ -30,9 +30,9 @@ use Metadata\MergeableClassMetadata;
|
|
|
*/
|
|
|
class ClassMetadata extends MergeableClassMetadata
|
|
|
{
|
|
|
- const ACCESSOR_ORDER_UNDEFINED = 'undefined';
|
|
|
- const ACCESSOR_ORDER_ALPHABETICAL = 'alphabetical';
|
|
|
- const ACCESSOR_ORDER_CUSTOM = 'custom';
|
|
|
+ const ACCESSOR_ORDER_UNDEFINED = 'undefined';
|
|
|
+ const ACCESSOR_ORDER_ALPHABETICAL = 'alphabetical';
|
|
|
+ const ACCESSOR_ORDER_CUSTOM = 'custom';
|
|
|
|
|
|
public $preSerializeMethods = array();
|
|
|
public $postSerializeMethods = array();
|
|
@@ -49,25 +49,25 @@ class ClassMetadata extends MergeableClassMetadata
|
|
|
*/
|
|
|
public function setAccessorOrder($order, array $customOrder = array())
|
|
|
{
|
|
|
- if (!in_array($order, array(self::ACCESSOR_ORDER_UNDEFINED, self::ACCESSOR_ORDER_ALPHABETICAL, self::ACCESSOR_ORDER_CUSTOM), true)) {
|
|
|
- throw new \InvalidArgumentException(sprintf('The accessor order "%s" is invalid.', $order));
|
|
|
- }
|
|
|
-
|
|
|
- foreach ($customOrder as $name) {
|
|
|
- if (!is_string($name)) {
|
|
|
- throw new \InvalidArgumentException(sprintf('$customOrder is expected to be a list of strings, but got element of value %s.', json_encode($name)));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- $this->accessorOrder = $order;
|
|
|
- $this->customOrder = array_flip($customOrder);
|
|
|
- $this->sortProperties();
|
|
|
+ if (!in_array($order, array(self::ACCESSOR_ORDER_UNDEFINED, self::ACCESSOR_ORDER_ALPHABETICAL, self::ACCESSOR_ORDER_CUSTOM), true)) {
|
|
|
+ throw new \InvalidArgumentException(sprintf('The accessor order "%s" is invalid.', $order));
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach ($customOrder as $name) {
|
|
|
+ if (!is_string($name)) {
|
|
|
+ throw new \InvalidArgumentException(sprintf('$customOrder is expected to be a list of strings, but got element of value %s.', json_encode($name)));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $this->accessorOrder = $order;
|
|
|
+ $this->customOrder = array_flip($customOrder);
|
|
|
+ $this->sortProperties();
|
|
|
}
|
|
|
|
|
|
public function addPropertyMetadata(PropertyMetadata $metadata)
|
|
|
{
|
|
|
- parent::addPropertyMetadata($metadata);
|
|
|
- $this->sortProperties();
|
|
|
+ parent::addPropertyMetadata($metadata);
|
|
|
+ $this->sortProperties();
|
|
|
}
|
|
|
|
|
|
public function addPreSerializeMethod(MethodMetadata $method)
|
|
@@ -98,8 +98,8 @@ class ClassMetadata extends MergeableClassMetadata
|
|
|
$this->xmlRootName = $object->xmlRootName;
|
|
|
|
|
|
if ($object->accessorOrder) {
|
|
|
- $this->accessorOrder = $object->accessorOrder;
|
|
|
- $this->customOrder = $object->customOrder;
|
|
|
+ $this->accessorOrder = $object->accessorOrder;
|
|
|
+ $this->customOrder = $object->customOrder;
|
|
|
}
|
|
|
|
|
|
$this->sortProperties();
|
|
@@ -107,15 +107,15 @@ class ClassMetadata extends MergeableClassMetadata
|
|
|
|
|
|
public function serialize()
|
|
|
{
|
|
|
- $this->sortProperties();
|
|
|
+ $this->sortProperties();
|
|
|
|
|
|
return serialize(array(
|
|
|
$this->preSerializeMethods,
|
|
|
$this->postSerializeMethods,
|
|
|
$this->postDeserializeMethods,
|
|
|
$this->xmlRootName,
|
|
|
- $this->accessorOrder,
|
|
|
- $this->customOrder,
|
|
|
+ $this->accessorOrder,
|
|
|
+ $this->customOrder,
|
|
|
parent::serialize(),
|
|
|
));
|
|
|
}
|
|
@@ -127,8 +127,8 @@ class ClassMetadata extends MergeableClassMetadata
|
|
|
$this->postSerializeMethods,
|
|
|
$this->postDeserializeMethods,
|
|
|
$this->xmlRootName,
|
|
|
- $this->accessorOrder,
|
|
|
- $this->customOrder,
|
|
|
+ $this->accessorOrder,
|
|
|
+ $this->customOrder,
|
|
|
$parentStr
|
|
|
) = unserialize($str);
|
|
|
|
|
@@ -137,32 +137,32 @@ class ClassMetadata extends MergeableClassMetadata
|
|
|
|
|
|
private function sortProperties()
|
|
|
{
|
|
|
- switch ($this->accessorOrder) {
|
|
|
- case self::ACCESSOR_ORDER_ALPHABETICAL:
|
|
|
- ksort($this->propertyMetadata);
|
|
|
- break;
|
|
|
+ switch ($this->accessorOrder) {
|
|
|
+ case self::ACCESSOR_ORDER_ALPHABETICAL:
|
|
|
+ ksort($this->propertyMetadata);
|
|
|
+ break;
|
|
|
|
|
|
- case self::ACCESSOR_ORDER_CUSTOM:
|
|
|
- $order = $this->customOrder;
|
|
|
- uksort($this->propertyMetadata, function($a, $b) use ($order) {
|
|
|
- $existsA = isset($order[$a]);
|
|
|
- $existsB = isset($order[$b]);
|
|
|
+ case self::ACCESSOR_ORDER_CUSTOM:
|
|
|
+ $order = $this->customOrder;
|
|
|
+ uksort($this->propertyMetadata, function($a, $b) use ($order) {
|
|
|
+ $existsA = isset($order[$a]);
|
|
|
+ $existsB = isset($order[$b]);
|
|
|
|
|
|
- if (!$existsA && !$existsB) {
|
|
|
- return 0;
|
|
|
- }
|
|
|
+ if (!$existsA && !$existsB) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
|
|
|
- if (!$existsA) {
|
|
|
- return 1;
|
|
|
- }
|
|
|
+ if (!$existsA) {
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
|
|
|
- if (!$existsB) {
|
|
|
- return -1;
|
|
|
- }
|
|
|
-
|
|
|
- return $order[$a] < $order[$b] ? -1 : 1;
|
|
|
- });
|
|
|
- break;
|
|
|
- }
|
|
|
+ if (!$existsB) {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ return $order[$a] < $order[$b] ? -1 : 1;
|
|
|
+ });
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
}
|