global statement removal: hphp/test [7/x]
[hiphop-php.git] / hphp / test / quick / serialize.php
blobbccbde69bf4130592c739485ec13dbb326a77285
1 <?php
3 class A {
4 public $a = 1;
5 private $b = "hello";
6 protected $c = array(1, 2);
9 class B extends A {
10 public $b = 0;
13 class C {
14 public $a, $b, $c;
15 function __construct() {
16 $this->a = null;
17 $this->b = acos(1.01);
18 $this->c = log(0);
19 echo "C has a safe constructor.\n";
21 function __wakeup() {
22 echo "C wakes up safely.\n";
24 function __sleep() {
25 echo "C sleeps safely.\n";
26 return array('a', 'b', 'c');
30 class DangerousClass {
31 public $danger = "DangerousString";
32 function __construct() {
33 echo "I have dangerous constructor.\n";
35 function __wakeup() {
36 echo "I wake up dangerously.\n";
38 function __sleep() {
39 echo "I sleep dangerously.\n";
40 return array('danger');
44 class E {
45 public $dangerousClass;
46 function __construct() {
47 $this->dangerousClass = new DangerousClass;
51 class F implements Serializable {
52 public function serialize() {
53 return "SerializedData";
55 public function unserialize($serialized) {
56 echo "unserialize: $serialized\n";
57 return $this;
61 class G extends DangerousClass {
64 function test_serialization($obj, $class_whitelist) {
65 $str = serialize($obj);
66 var_dump($str);
67 $new_obj = unserialize($str, $class_whitelist);
68 var_dump($new_obj);
69 unset($obj);
70 unset($new_obj);
71 echo "========================\n";
74 function main() {
75 test_serialization(new A, []);
76 test_serialization(new B, array('A', 'B'));
77 test_serialization(new C, array('C'));
78 test_serialization(new DangerousClass, array());
79 test_serialization(new E, array('E'));
80 test_serialization(new F, array('F'));
81 test_serialization(new G, array('G'));
82 test_serialization(array("Hello World<>$%", acos(1.01), log(0), 50), array());
83 test_serialization(
84 array( new A, array(new B, array(new C, array(new E, array(new F))))),
85 array('abc' => 'A', 5 => 'C', 'E', 'B', 'F')
89 main();