Annotation of embedaddon/php/ext/standard/tests/serialize/005.phpt, revision 1.1.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>