2 error_reporting(E_ALL
);
4 function __autoload($s) { echo "[load $s]"; }
8 class C
implements I
{ }
10 class E
extends B
implements I
{ }
12 class UnexpectedSerializedClass
extends Exception
{}
14 $v = serialize(array(new A
, new B
, new C
, new D
, new E
));
19 $x ==> get_class($x)[0],
20 unserialize($v, $opts))),
22 } catch (Exception
$e) {
23 printf("%s %s %s\n", get_class($e), $e->getMessage(), json_encode($opts));
26 foreach (vec
[false, true] as $subclasses) {
27 $check = $xs ==> $run(shape('include_subclasses' => $subclasses,
28 'allowed_classes' => $xs));
36 $check(array('A', 'I'));
37 $check(vec
['A', 'I']);
38 $run(shape('include_subclasses' => $subclasses,
39 'allowed_classes' => vec
['A','B','C','D','E','I'],
40 'throw' => 'UnexpectedSerializedClass'));
41 $run(shape('include_subclasses' => $subclasses,
42 'allowed_classes' => vec
['A','I'],
43 'throw' => 'UnexpectedSerializedClass'));
44 $run(shape('include_subclasses' => $subclasses,
45 'allowed_classes' => false,
47 $run(shape('include_subclasses' => $subclasses,
48 'allowed_classes' => false,
49 'throw' => 'UnexpectedSerializedClass'));
51 unserialize('O:3:"Foo":0:{}',
52 shape('allowed_classes' => vec
['I']));
53 unserialize('O:3:"Bar":0:{}',
54 shape('allowed_classes' => vec
['Feh'],
55 'include_subclasses' => true));
56 unserialize('O:3:"Baz":0:{}',
57 shape('allowed_classes' => vec
['Fiddle'],
58 'include_subclasses' => true,
59 'throw' => 'MadeUp'));