📄 005.phpt
字号:
--TEST--serialize()/unserialize() objects--SKIPIF--<?php if (!interface_exists('Serializable')) die('skip Interface Serialzable not defined'); ?>--FILE--<?php// This test verifies that old and new style (un)serializing do not interfere.function do_autoload($class_name){ if ($class_name != 'autoload_not_available') { require_once(dirname(__FILE__) . '/' . strtolower($class_name) . '.p5c'); } echo __FUNCTION__ . "($class_name)\n";}function unserializer($class_name){ echo __METHOD__ . "($class_name)\n"; switch($class_name) { case 'TestNAOld': eval("class TestNAOld extends TestOld {}"); break; case 'TestNANew': eval("class TestNANew extends TestNew {}"); break; case 'TestNANew2': eval("class TestNANew2 extends TestNew {}"); break; default: echo "Try __autoload()\n"; if (!function_exists('__autoload')) { eval('function __autoload($class_name) { do_autoload($class_name); }'); } __autoload($class_name); break; }}ini_set('unserialize_callback_func', 'unserializer');class TestOld{ function serialize() { echo __METHOD__ . "()\n"; } function unserialize($serialized) { echo __METHOD__ . "()\n"; } function __wakeup() { echo __METHOD__ . "()\n"; } function __sleep() { echo __METHOD__ . "()\n"; return array(); }}class TestNew implements Serializable{ protected static $check = 0; function serialize() { echo __METHOD__ . "()\n"; switch(++self::$check) { case 1: return NULL; case 2: return "2"; } } function unserialize($serialized) { echo __METHOD__ . "()\n"; } function __wakeup() { echo __METHOD__ . "()\n"; } function __sleep() { echo __METHOD__ . "()\n"; }}echo "===O1===\n";var_dump($ser = serialize(new TestOld));var_dump(unserialize($ser));echo "===N1===\n";var_dump($ser = serialize(new TestNew));var_dump(unserialize($ser));echo "===N2===\n";var_dump($ser = serialize(new TestNew));var_dump(unserialize($ser));echo "===NAOld===\n";var_dump(unserialize('O:9:"TestNAOld":0:{}'));echo "===NANew===\n";var_dump(unserialize('O:9:"TestNANew":0:{}'));echo "===NANew2===\n";var_dump(unserialize('C:10:"TestNANew2":0:{}'));echo "===AutoOld===\n";var_dump(unserialize('O:19:"autoload_implements":0:{}'));// Now we have __autoload(), that will be called before the old style header.// If the old style handler also fails to register the class then the object// becomes an incomplete class instance.echo "===AutoNA===\n";var_dump(unserialize('O:22:"autoload_not_available":0:{}'));?>===DONE===<?php exit(0); ?>--EXPECTF--===O1===TestOld::__sleep()string(18) "O:7:"TestOld":0:{}"TestOld::__wakeup()object(TestOld)#%d (0) {}===N1===TestNew::serialize()string(2) "N;"NULL===N2===TestNew::serialize()string(19) "C:7:"TestNew":1:{2}"TestNew::unserialize()object(TestNew)#%d (0) {}===NAOld===unserializer(TestNAOld)TestOld::__wakeup()object(TestNAOld)#%d (0) {}===NANew===unserializer(TestNANew)TestNew::__wakeup()object(TestNANew)#%d (0) {}===NANew2===unserializer(TestNANew2)TestNew::unserialize()object(TestNANew2)#%d (0) {}===AutoOld===unserializer(autoload_implements)Try __autoload()do_autoload(autoload_interface)do_autoload(autoload_implements)object(autoload_implements)#%d (0) {}===AutoNA===do_autoload(autoload_not_available)unserializer(autoload_not_available)Try __autoload()do_autoload(autoload_not_available)do_autoload(autoload_not_available)Warning: unserialize(): Function unserializer() hasn't defined the class it was called for in %s005.php on line %dobject(__PHP_Incomplete_Class)#1 (1) { ["__PHP_Incomplete_Class_Name"]=> string(22) "autoload_not_available"}===DONE===--UEXPECTF--===O1===TestOld::__sleep()unicode(18) "O:7:"TestOld":0:{}"TestOld::__wakeup()object(TestOld)#%d (0) {}===N1===TestNew::serialize()unicode(2) "N;"NULL===N2===TestNew::serialize()unicode(19) "C:7:"TestNew":1:{2}"TestNew::unserialize()object(TestNew)#%d (0) {}===NAOld===unserializer(TestNAOld)TestOld::__wakeup()object(TestNAOld)#%d (0) {}===NANew===unserializer(TestNANew)TestNew::__wakeup()object(TestNANew)#%d (0) {}===NANew2===unserializer(TestNANew2)TestNew::unserialize()object(TestNANew2)#%d (0) {}===AutoOld===unserializer(autoload_implements)Try __autoload()do_autoload(autoload_interface)do_autoload(autoload_implements)object(autoload_implements)#%d (0) {}===AutoNA===do_autoload(autoload_not_available)unserializer(autoload_not_available)Try __autoload()do_autoload(autoload_not_available)do_autoload(autoload_not_available)Warning: unserialize(): Function unserializer() hasn't defined the class it was called for in %s005.php on line %dobject(__PHP_Incomplete_Class)#1 (1) { [u"__PHP_Incomplete_Class_Name"]=> unicode(22) "autoload_not_available"}===DONE===
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -