绕过__wakeup函数,对私有变量进行重构教程:
序列化public private protect参数产生不同结果
Pubic 公有
Private 私有
Protect 保护
class test{
public $name = 'xiaohua';
private $address = 'shanxi';
protected $age = '21';
}
$test1 = new test();
$object = serialize($test1);
print_r($object);
?>
序列化之后打印出:
O:4:"test":3:{s:4:"name";s:7:"xiaohua";s:9:"testsex";s:6:"secret";s:6:"*age";s:2:"20";}
Public属性序列化后格式:成员名
Private属性序列化后格式:%00类名%00成员名
Protected属性序列化后的格式:%00*%00成员名
通过对网页抓取输出是这样的:
O:4:"test":3:{s:11:"\00test\00test1";s:5:"hello";s:5:"test2";s:5:"hello";s:8:"\00*\00test3";s:5:"hello";}
(1) __construct():当对象创建时会自动调用(但在unserialize()时是不会自动调用的)。
(2) __wakeup() :unserialize()时会自动调用
(3) __destruct():当对象被销毁时会自动调用。
(4) __toString():当反序列化后的对象被输出在模板中的时候(转换成字符串的时候)自动调用
(5) __get() :当从不可访问的属性读取数据
(6) __call(): 在对象上下文中调用不可访问的方法时触发
优秀例题:
|