Annotation of embedaddon/php/ext/standard/tests/serialize/005.phpt, revision 1.1

1.1     ! misho       1: --TEST--
        !             2: serialize()/unserialize() objects
        !             3: --SKIPIF--
        !             4: <?php if (!interface_exists('Serializable')) die('skip Interface Serialzable not defined'); ?>
        !             5: --FILE--
        !             6: <?php
        !             7: 
        !             8: // This test verifies that old and new style (un)serializing do not interfere.
        !             9: 
        !            10: function do_autoload($class_name)
        !            11: {
        !            12:        if ($class_name != 'autoload_not_available')
        !            13:        {
        !            14:                require_once(dirname(__FILE__) . '/' . strtolower($class_name) . '.p5c');
        !            15:        }
        !            16:        echo __FUNCTION__ . "($class_name)\n";
        !            17: }
        !            18: 
        !            19: function unserializer($class_name)
        !            20: {
        !            21:        echo __METHOD__ . "($class_name)\n";
        !            22:        switch($class_name)
        !            23:        {
        !            24:        case 'TestNAOld':
        !            25:                eval("class TestNAOld extends TestOld {}");
        !            26:                break;
        !            27:        case 'TestNANew':
        !            28:                eval("class TestNANew extends TestNew {}");
        !            29:                break;
        !            30:        case 'TestNANew2':
        !            31:                eval("class TestNANew2 extends TestNew {}");
        !            32:                break;
        !            33:        default:
        !            34:                echo "Try __autoload()\n";
        !            35:                if (!function_exists('__autoload'))
        !            36:                {
        !            37:                        eval('function __autoload($class_name) { do_autoload($class_name); }');
        !            38:                }
        !            39:                __autoload($class_name);
        !            40:                break;
        !            41:        }
        !            42: }
        !            43: 
        !            44: ini_set('unserialize_callback_func', 'unserializer');
        !            45: 
        !            46: class TestOld
        !            47: {
        !            48:        function serialize()
        !            49:        {
        !            50:                echo __METHOD__ . "()\n";
        !            51:        }
        !            52:        
        !            53:        function unserialize($serialized)
        !            54:        {
        !            55:                echo __METHOD__ . "()\n";
        !            56:        }
        !            57:        
        !            58:        function __wakeup()
        !            59:        {
        !            60:                echo __METHOD__ . "()\n";
        !            61:        }
        !            62:        
        !            63:        function __sleep()
        !            64:        {
        !            65:                echo __METHOD__ . "()\n";
        !            66:                return array();
        !            67:        }
        !            68: }
        !            69: 
        !            70: class TestNew implements Serializable
        !            71: {
        !            72:        protected static $check = 0;
        !            73: 
        !            74:        function serialize()
        !            75:        {
        !            76:                echo __METHOD__ . "()\n";
        !            77:                switch(++self::$check)
        !            78:                {
        !            79:                case 1:
        !            80:                        return NULL;
        !            81:                case 2:
        !            82:                        return "2";
        !            83:                }
        !            84:        }
        !            85:        
        !            86:        function unserialize($serialized)
        !            87:        {
        !            88:                echo __METHOD__ . "()\n";
        !            89:        }
        !            90:        
        !            91:        function __wakeup()
        !            92:        {
        !            93:                echo __METHOD__ . "()\n";
        !            94:        }
        !            95:        
        !            96:        function __sleep()
        !            97:        {
        !            98:                echo __METHOD__ . "()\n";
        !            99:        }
        !           100: }
        !           101: 
        !           102: echo "===O1===\n";
        !           103: var_dump($ser = serialize(new TestOld));
        !           104: var_dump(unserialize($ser));
        !           105: 
        !           106: echo "===N1===\n";
        !           107: var_dump($ser = serialize(new TestNew));
        !           108: var_dump(unserialize($ser));
        !           109: 
        !           110: echo "===N2===\n";
        !           111: var_dump($ser = serialize(new TestNew));
        !           112: var_dump(unserialize($ser));
        !           113: 
        !           114: echo "===NAOld===\n";
        !           115: var_dump(unserialize('O:9:"TestNAOld":0:{}'));
        !           116: 
        !           117: echo "===NANew===\n";
        !           118: var_dump(unserialize('O:9:"TestNANew":0:{}'));
        !           119: 
        !           120: echo "===NANew2===\n";
        !           121: var_dump(unserialize('C:10:"TestNANew2":0:{}'));
        !           122: 
        !           123: echo "===AutoOld===\n";
        !           124: var_dump(unserialize('O:19:"autoload_implements":0:{}'));
        !           125: 
        !           126: // Now we have __autoload(), that will be called before the old style header.
        !           127: // If the old style handler also fails to register the class then the object
        !           128: // becomes an incomplete class instance.
        !           129: 
        !           130: echo "===AutoNA===\n";
        !           131: var_dump(unserialize('O:22:"autoload_not_available":0:{}'));
        !           132: ?>
        !           133: ===DONE===
        !           134: <?php exit(0); ?>
        !           135: --EXPECTF--
        !           136: ===O1===
        !           137: TestOld::__sleep()
        !           138: string(18) "O:7:"TestOld":0:{}"
        !           139: TestOld::__wakeup()
        !           140: object(TestOld)#%d (0) {
        !           141: }
        !           142: ===N1===
        !           143: TestNew::serialize()
        !           144: string(2) "N;"
        !           145: NULL
        !           146: ===N2===
        !           147: TestNew::serialize()
        !           148: string(19) "C:7:"TestNew":1:{2}"
        !           149: TestNew::unserialize()
        !           150: object(TestNew)#%d (0) {
        !           151: }
        !           152: ===NAOld===
        !           153: unserializer(TestNAOld)
        !           154: TestOld::__wakeup()
        !           155: object(TestNAOld)#%d (0) {
        !           156: }
        !           157: ===NANew===
        !           158: unserializer(TestNANew)
        !           159: TestNew::__wakeup()
        !           160: object(TestNANew)#%d (0) {
        !           161: }
        !           162: ===NANew2===
        !           163: unserializer(TestNANew2)
        !           164: TestNew::unserialize()
        !           165: object(TestNANew2)#%d (0) {
        !           166: }
        !           167: ===AutoOld===
        !           168: unserializer(autoload_implements)
        !           169: Try __autoload()
        !           170: do_autoload(autoload_interface)
        !           171: do_autoload(autoload_implements)
        !           172: object(autoload_implements)#%d (0) {
        !           173: }
        !           174: ===AutoNA===
        !           175: do_autoload(autoload_not_available)
        !           176: unserializer(autoload_not_available)
        !           177: Try __autoload()
        !           178: do_autoload(autoload_not_available)
        !           179: do_autoload(autoload_not_available)
        !           180: 
        !           181: Warning: unserialize(): Function unserializer() hasn't defined the class it was called for in %s005.php on line %d
        !           182: object(__PHP_Incomplete_Class)#%d (1) {
        !           183:   ["__PHP_Incomplete_Class_Name"]=>
        !           184:   string(22) "autoload_not_available"
        !           185: }
        !           186: ===DONE===

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>