PHP 中对于对象的__toString() 和serialize方法
在PHP中,将一个对象以字符串形式打印可以有两种方式,一种是调用魔术方法__toString(), 一种是序列化。之前一直不清楚这两者的区别。最近做了一个实验。废话少说,先上代码
1 class person{ 2 3 private $name ; 4 public $age; 5 6 public function __construct($name , $age) 7 { 8 $this->name = $name; 9 $this->age = $age; 10 } 11 12 public function study($crose){ 13 echo $this->name . ' study ' . $crose . PHP_EOL; 14 } 15 16 public function __toString() 17 { 18 // TODO: Implement __toString() method. 19 return json_encode($this); 20 } 21 22 } 23 24 25 $person = new person('xiaoming', '23'); 26 27 $person->study('math'); 28 29 echo $person; 30 31 echo PHP_EOL; 32 33 $ser = serialize($person); 34 35 echo $ser .PHP_EOL; 36 37 $newPerson = unserialize($ser); 38 39 $newPerson->study('English');
运行结果如下图:
解释一下,第一行是正常执行类中study方法。
第二行是执行toString方法。 从结果中可以看到,这个方法只是打印了对象的public 属性。对于私有属性并没有打印。
第三行是执行序列化并打印出来。
第四行是执行反序列化后,调用study方法。