PageRenderTime 33ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/hphp/test/zend/bad/ext/standard/tests/serialize/005.php

http://github.com/facebook/hiphop-php
PHP | 129 lines | 103 code | 22 blank | 4 comment | 3 complexity | 367a834472b1644714204021b2127160 MD5 | raw file
Possible License(s): LGPL-2.1, BSD-2-Clause, BSD-3-Clause, MPL-2.0-no-copyleft-exception, MIT, LGPL-2.0, Apache-2.0
  1. <?php
  2. // This test verifies that old and new style (un)serializing do not interfere.
  3. function do_autoload($class_name)
  4. {
  5. if ($class_name != 'autoload_not_available')
  6. {
  7. require_once(dirname(__FILE__) . '/' . strtolower($class_name) . '.p5c');
  8. }
  9. echo __FUNCTION__ . "($class_name)\n";
  10. }
  11. function unserializer($class_name)
  12. {
  13. echo __METHOD__ . "($class_name)\n";
  14. switch($class_name)
  15. {
  16. case 'TestNAOld':
  17. eval("class TestNAOld extends TestOld {}");
  18. break;
  19. case 'TestNANew':
  20. eval("class TestNANew extends TestNew {}");
  21. break;
  22. case 'TestNANew2':
  23. eval("class TestNANew2 extends TestNew {}");
  24. break;
  25. default:
  26. echo "Try __autoload()\n";
  27. if (!function_exists('__autoload'))
  28. {
  29. eval('function __autoload($class_name) { do_autoload($class_name); }');
  30. }
  31. __autoload($class_name);
  32. break;
  33. }
  34. }
  35. ini_set('unserialize_callback_func', 'unserializer');
  36. class TestOld
  37. {
  38. function serialize()
  39. {
  40. echo __METHOD__ . "()\n";
  41. }
  42. function unserialize($serialized)
  43. {
  44. echo __METHOD__ . "()\n";
  45. }
  46. function __wakeup()
  47. {
  48. echo __METHOD__ . "()\n";
  49. }
  50. function __sleep()
  51. {
  52. echo __METHOD__ . "()\n";
  53. return array();
  54. }
  55. }
  56. class TestNew implements Serializable
  57. {
  58. protected static $check = 0;
  59. function serialize()
  60. {
  61. echo __METHOD__ . "()\n";
  62. switch(++self::$check)
  63. {
  64. case 1:
  65. return NULL;
  66. case 2:
  67. return "2";
  68. }
  69. }
  70. function unserialize($serialized)
  71. {
  72. echo __METHOD__ . "()\n";
  73. }
  74. function __wakeup()
  75. {
  76. echo __METHOD__ . "()\n";
  77. }
  78. function __sleep()
  79. {
  80. echo __METHOD__ . "()\n";
  81. }
  82. }
  83. echo "===O1===\n";
  84. var_dump($ser = serialize(new TestOld));
  85. var_dump(unserialize($ser));
  86. echo "===N1===\n";
  87. var_dump($ser = serialize(new TestNew));
  88. var_dump(unserialize($ser));
  89. echo "===N2===\n";
  90. var_dump($ser = serialize(new TestNew));
  91. var_dump(unserialize($ser));
  92. echo "===NAOld===\n";
  93. var_dump(unserialize('O:9:"TestNAOld":0:{}'));
  94. echo "===NANew===\n";
  95. var_dump(unserialize('O:9:"TestNANew":0:{}'));
  96. echo "===NANew2===\n";
  97. var_dump(unserialize('C:10:"TestNANew2":0:{}'));
  98. echo "===AutoOld===\n";
  99. var_dump(unserialize('O:19:"autoload_implements":0:{}'));
  100. // Now we have __autoload(), that will be called before the old style header.
  101. // If the old style handler also fails to register the class then the object
  102. // becomes an incomplete class instance.
  103. echo "===AutoNA===\n";
  104. var_dump(unserialize('O:22:"autoload_not_available":0:{}'));
  105. ?>
  106. ===DONE===
  107. <?php exit(0); ?>