深入理解对象3
2018年8月8日
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<?php class Person { public $name; public $gender; public function say() { echo $this->name . ' is ' . $this->gender . PHP_EOL; } } class Family { public $people; public $location; public function __construct($p, $loc) { $this->people = $p; $this->location = $loc; } } $student = new Person; $student->name = 'Tom'; $student->gender = 'male'; $tom = new Family($student,'peking'); print_r($tom); echo serialize($tom).PHP_EOL; $student_arr = array('name' => 'Tom', 'gender' => 'male'); echo serialize($student_arr).PHP_EOL; echo serialize($student); |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Family Object ( [people] => Person Object ( [name] => Tom [gender] => male ) [location] => peking ) O:6:"Family":2:{s:6:"people";O:6:"Person":2:{s:4:"name";s:3:"Tom";s:6:"gender";s:4:"male";}s:8:"location";s:6:"peking";} a:2:{s:4:"name";s:3:"Tom";s:6:"gender";s:4:"male";} O:6:"Person":2:{s:4:"name";s:3:"Tom";s:6:"gender";s:4:"male";} |
把前面产生的对象,作为这个新的对象的属性传入,可以看出序列化后的对象会附带所属的类名保证此对象能够在执行类的方法(也是自己所能执行的方法)时,可以正确的找到方法所在的代码空间(即对象所拥有的方法存储在类里)另外,在一个对象的实例化变量引用其他对象时,序列化该对象是也会应用对象进行序列化.
类是定义一些列属性和操作的模板,而对象则把属性进行具体化,然后交给类处理.
对象就是数据,对象本身不包含方法,但是对象有一个指针指向类,这个类里可以有方法.
方法描述不同属性所导致的不同表现.
类和对象是不可分割的,有对象必定有一个类和和其对应,否则这个对象也就没有了亲人和孩子(但是有一个特殊情况存在,就是由标量进行强制的类型转换的object)没有一个类和它对应,此时,php中一个成为孤儿的stdClass类就会收留这个对象