在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方法。

 

版权声明:本文为cyforever原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/cyforever/p/9609123.html