Skip to content

Commit da1fd8c

Browse files
authored
Disallow serialization with Serializable interface (#11)
1 parent a16efb0 commit da1fd8c

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

src/Enumeration/Enumeration.php

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use Dbalabka\Enumeration\Exception\EnumerationException;
77
use Dbalabka\Enumeration\Exception\InvalidArgumentException;
88
use Dbalabka\StaticConstructorLoader\StaticConstructorInterface;
9+
use Serializable;
910
use function array_search;
1011
use function get_class_vars;
1112
use function sprintf;
@@ -18,7 +19,7 @@
1819
*
1920
* @author Dmitry Balabka <[email protected]>
2021
*/
21-
abstract class Enumeration implements StaticConstructorInterface
22+
abstract class Enumeration implements StaticConstructorInterface, Serializable
2223
{
2324
const INITIAL_ORDINAL = 0;
2425

@@ -158,6 +159,7 @@ final public function __clone()
158159

159160
/**
160161
* Serialization is not allowed right now. It is not possible to properly serialize the singleton.
162+
* See the documentation for workaround.
161163
*/
162164
final public function __sleep()
163165
{
@@ -168,4 +170,24 @@ final public function __wakeup()
168170
{
169171
throw new EnumerationException('Enum unserialization is not allowed');
170172
}
173+
174+
final public function __serialize()
175+
{
176+
throw new EnumerationException('Enum serialization is not allowed');
177+
}
178+
179+
final public function __unserialize()
180+
{
181+
throw new EnumerationException('Enum unserialization is not allowed');
182+
}
183+
184+
final public function serialize()
185+
{
186+
throw new EnumerationException('Enum serialization is not allowed');
187+
}
188+
189+
final public function unserialize($data)
190+
{
191+
throw new EnumerationException('Enum unserialization is not allowed');
192+
}
171193
}

tests/Enumeration/EnumerationTest.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Dbalabka\Enumeration\Tests\Fixtures\ActionWithPublicConstructor;
1212
use Dbalabka\Enumeration\Tests\Fixtures\Flag;
1313
use Error;
14+
use PHPUnit\Framework\Error\Warning;
1415
use PHPUnit\Framework\TestCase;
1516
use function serialize;
1617
use function version_compare;
@@ -96,7 +97,11 @@ public function testSerialization()
9697
public function testUnserialization()
9798
{
9899
Flag::initialize();
99-
$this->expectException(EnumerationException::class);
100+
if (version_compare(PHP_VERSION, '7.4.0-dev', '<')) {
101+
$this->expectException(Warning::class);
102+
} else {
103+
$this->expectException(EnumerationException::class);
104+
}
100105
unserialize('O:40:"Dbalabka\Enumeration\Tests\Fixtures\Flag":2:{s:51:" Dbalabka\Enumeration\Tests\Fixtures\Flag flagValue";i:2;s:10:" * ordinal";i:1;}');
101106
}
102107

0 commit comments

Comments
 (0)