diff --git a/src/Enum.php b/src/Enum.php index bc5afe2b..ceb29173 100644 --- a/src/Enum.php +++ b/src/Enum.php @@ -167,7 +167,7 @@ final public function is($enumerator) * * @param static|null|bool|int|float|string|array $enumerator An enumerator object or value * @return static - * @throws InvalidArgumentException On an unknwon or invalid value + * @throws InvalidArgumentException On an unknown or invalid value * @throws LogicException On ambiguous constant values */ final public static function get($enumerator) @@ -184,7 +184,7 @@ final public static function get($enumerator) * * @param null|bool|int|float|string|array $value Enumerator value * @return static - * @throws InvalidArgumentException On an unknwon or invalid value + * @throws InvalidArgumentException On an unknown or invalid value * @throws LogicException On ambiguous constant values */ final public static function byValue($value) @@ -423,6 +423,6 @@ private static function noAmbiguousValues($constants) */ final public static function __callStatic(string $method, array $args) { - return self::byName($method); + return static::byName($method); } } diff --git a/src/EnumSerializableTrait.php b/src/EnumSerializableTrait.php index e304a60c..a791aed6 100644 --- a/src/EnumSerializableTrait.php +++ b/src/EnumSerializableTrait.php @@ -24,7 +24,7 @@ trait EnumSerializableTrait { /** * The method will be defined by MabeEnum\Enum - * @return null|bool|int|float|string + * @return null|bool|int|float|string|array */ abstract public function getValue(); @@ -49,7 +49,7 @@ public function serialize(): string public function unserialize($serialized): void { $value = \unserialize($serialized); - $constants = self::getConstants(); + $constants = static::getConstants(); $name = \array_search($value, $constants, true); if ($name === false) { $message = \is_scalar($value) diff --git a/tests/MabeEnumTest/EnumSerializableTraitTest.php b/tests/MabeEnumTest/EnumSerializableTraitTest.php index c7aefa89..c09842fe 100644 --- a/tests/MabeEnumTest/EnumSerializableTraitTest.php +++ b/tests/MabeEnumTest/EnumSerializableTraitTest.php @@ -4,6 +4,7 @@ use LogicException; use MabeEnum\Enum; +use MabeEnumTest\TestAsset\ExtendedSerializableEnum; use MabeEnumTest\TestAsset\SerializableEnum; use PHPUnit\Framework\TestCase; use ReflectionClass; @@ -65,6 +66,18 @@ public function testUnserializeThrowsLogicExceptionOnChangingValue() $enum->unserialize(serialize(SerializableEnum::STR)); } + public function testInheritence() + { + $enum = ExtendedSerializableEnum::EXTENDED(); + + $serialized = serialize($enum); + $this->assertInternalType('string', $serialized); + + $unserialized = unserialize($serialized); + $this->assertInstanceOf(ExtendedSerializableEnum::class, $unserialized); + $this->assertSame($enum->getValue(), $unserialized->getValue()); + } + /** * Clears all instantiated enumerations and detected constants of the given enumerator * @param string $enumeration diff --git a/tests/MabeEnumTest/EnumTest.php b/tests/MabeEnumTest/EnumTest.php index 219e9647..e451e70a 100644 --- a/tests/MabeEnumTest/EnumTest.php +++ b/tests/MabeEnumTest/EnumTest.php @@ -101,10 +101,22 @@ public function testEnumInheritance() ), EnumInheritance::getConstants()); $enum = EnumInheritance::get(EnumInheritance::ONE); + $this->assertInstanceOf(EnumInheritance::class, $enum); $this->assertSame(EnumInheritance::ONE, $enum->getValue()); $this->assertSame(0, $enum->getOrdinal()); $enum = EnumInheritance::get(EnumInheritance::INHERITANCE); + $this->assertInstanceOf(EnumInheritance::class, $enum); + $this->assertSame(EnumInheritance::INHERITANCE, $enum->getValue()); + $this->assertSame(17, $enum->getOrdinal()); + + $enum = EnumInheritance::ONE(); + $this->assertInstanceOf(EnumInheritance::class, $enum); + $this->assertSame(EnumInheritance::ONE, $enum->getValue()); + $this->assertSame(0, $enum->getOrdinal()); + + $enum = EnumInheritance::INHERITANCE(); + $this->assertInstanceOf(EnumInheritance::class, $enum); $this->assertSame(EnumInheritance::INHERITANCE, $enum->getValue()); $this->assertSame(17, $enum->getOrdinal()); } diff --git a/tests/MabeEnumTest/TestAsset/ExtendedSerializableEnum.php b/tests/MabeEnumTest/TestAsset/ExtendedSerializableEnum.php new file mode 100644 index 00000000..90126e63 --- /dev/null +++ b/tests/MabeEnumTest/TestAsset/ExtendedSerializableEnum.php @@ -0,0 +1,15 @@ +