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);
+ }
+}