diff --git a/UPGRADING.md b/UPGRADING.md index 09ce6c8..bbadabf 100644 --- a/UPGRADING.md +++ b/UPGRADING.md @@ -1,3 +1,55 @@ +From 2.2.3 to 2.3.0 +==================== + +- The `\Serializable` PHP interface is deprecated, the methods of this interface will be removed in 3.0. + This change is done to allow the use of the new `__serialize` and `__unserialize` PHP's strategy. + + If you were extending the metadata classes, your custom serialization methods were looking probably as something as this: + + ```php + class MyMetadata extends PropertyMetadata + { + // ... more code + + public function serialize() + { + $data = parent::serialize(); + + return \serialize([$data, $this->customMetadataProp]); + } + + public function unserialize($str) + { + list($str, $this->customMetadataProp) = \unserialize($str); + + parent::unserialize($str); + } + } + ``` + + After this change, your code should look like this: + + ```php + class MyMetadata extends PropertyMetadata + { + // ... more code + + protected function serializeToArray(): array + { + $data = parent::serializeToArray(); + + return [$data, $this->customMetadataProp]; + } + + protected function unserializeFromArray(array $data): void + { + list($data, $this->customMetadataProp) = $data; + + parent::unserializeFromArray($data); + } + } + ``` + From 1.7.0 to 2.0.0 ==================== diff --git a/phpcs.xml.dist b/phpcs.xml.dist index 640dc97..01e0f7a 100644 --- a/phpcs.xml.dist +++ b/phpcs.xml.dist @@ -31,6 +31,29 @@ + + src/PropertyMetadata.php + src/MethodMetadata.php + src/ClassMetadata.php + src/SerializationHelper.php + + + + src/PropertyMetadata.php + src/MethodMetadata.php + src/ClassMetadata.php + src/SerializationHelper.php + + + + + src/SerializationHelper.php + + + src/SerializationHelper.php + + + diff --git a/src/ClassMetadata.php b/src/ClassMetadata.php index d96d2e5..94b6d93 100644 --- a/src/ClassMetadata.php +++ b/src/ClassMetadata.php @@ -14,6 +14,8 @@ */ class ClassMetadata implements \Serializable { + use SerializationHelper; + /** * @var string */ @@ -74,33 +76,18 @@ public function isFresh(?int $timestamp = null): bool return true; } - /** - * @return string - * - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingNativeTypeHint - * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.UselessReturnAnnotation - */ - public function serialize() + protected function serializeToArray(): array { - return serialize([ + return [ $this->name, $this->methodMetadata, $this->propertyMetadata, $this->fileResources, $this->createdAt, - ]); + ]; } - /** - * @param string $str - * - * @return void - * - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingNativeTypeHint - * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.UselessReturnAnnotation - */ - public function unserialize($str) + protected function unserializeFromArray(array $data): void { [ $this->name, @@ -108,22 +95,6 @@ public function unserialize($str) $this->propertyMetadata, $this->fileResources, $this->createdAt, - ] = unserialize($str); - } - - /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification - */ - public function __serialize(): array - { - return [$this->serialize()]; - } - - /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingTraversableTypeHintSpecification - */ - public function __unserialize(array $data): void - { - $this->unserialize($data[0]); + ] = $data; } } diff --git a/src/MethodMetadata.php b/src/MethodMetadata.php index df5b555..742853a 100644 --- a/src/MethodMetadata.php +++ b/src/MethodMetadata.php @@ -15,6 +15,8 @@ */ class MethodMetadata implements \Serializable { + use SerializationHelper; + /** * @var string */ @@ -46,48 +48,6 @@ public function invoke(object $obj, array $args = []) return $this->getReflection()->invokeArgs($obj, $args); } - /** - * @return string - * - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingNativeTypeHint - * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.UselessReturnAnnotation - */ - public function serialize() - { - return serialize([$this->class, $this->name]); - } - - /** - * @param string $str - * - * @return void - * - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingNativeTypeHint - * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.UselessReturnAnnotation - */ - public function unserialize($str) - { - [$this->class, $this->name] = unserialize($str); - } - - /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification - */ - public function __serialize(): array - { - return [$this->serialize()]; - } - - /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingTraversableTypeHintSpecification - */ - public function __unserialize(array $data): void - { - $this->unserialize($data[0]); - } - /** * @return mixed */ @@ -117,4 +77,14 @@ private function getReflection(): \ReflectionMethod return $this->reflection; } + + protected function serializeToArray(): array + { + return [$this->class, $this->name]; + } + + protected function unserializeFromArray(array $data): void + { + [$this->class, $this->name] = $data; + } } diff --git a/src/PropertyMetadata.php b/src/PropertyMetadata.php index f5ccd3a..db4467f 100644 --- a/src/PropertyMetadata.php +++ b/src/PropertyMetadata.php @@ -14,6 +14,8 @@ */ class PropertyMetadata implements \Serializable { + use SerializationHelper; + /** * @var string */ @@ -30,48 +32,16 @@ public function __construct(string $class, string $name) $this->name = $name; } - /** - * @return string - * - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingNativeTypeHint - * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.UselessReturnAnnotation - */ - public function serialize() + protected function serializeToArray(): array { - return serialize([ + return [ $this->class, $this->name, - ]); - } - - /** - * @param string $str - * - * @return void - * - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingNativeTypeHint - * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.UselessReturnAnnotation - */ - public function unserialize($str) - { - [$this->class, $this->name] = unserialize($str); + ]; } - /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification - */ - public function __serialize(): array - { - return [$this->serialize()]; - } - - /** - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingTraversableTypeHintSpecification - */ - public function __unserialize(array $data): void + protected function unserializeFromArray(array $data): void { - $this->unserialize($data[0]); + [$this->class, $this->name] = $data; } } diff --git a/src/SerializationHelper.php b/src/SerializationHelper.php new file mode 100644 index 0000000..8af00d6 --- /dev/null +++ b/src/SerializationHelper.php @@ -0,0 +1,40 @@ +serializeToArray()); + } + + /** + * @deprecated Use unserializeFromArray + * + * @param string $str + * + * @return void + */ + public function unserialize($str) + { + $this->unserializeFromArray(unserialize($str)); + } + + public function __serialize(): array + { + return $this->serializeToArray(); + } + + public function __unserialize(array $data): void + { + $this->unserializeFromArray($data); + } +}