PHP核心技术——面向对象
程序员文章站
2022-10-06 13:31:04
类与对象: 类的定义与实例化。 类定义了一系列的属性和方法,并提供了实际的操作细节,这些方法可以用来对属性进行加工。 对象含有类属性的具体值,这就是类的实例化。正是由于属性的不同,才能区分不同的对象。在上面例子里,由于student和teacher的性别和姓名不一样,才得以区分开二人。 对象由属性和 ......
类与对象:
- 类的定义与实例化。
//定义类 class person{ public $name; public $gender; public function say(){ echo $this->name,"\tis ",$this->gender,"\r\n"; } } 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"; $student->say(); $teacher=new person(); $teacher->name='kate'; $teacher->gender="female"; $teacher->say();
- 类定义了一系列的属性和方法,并提供了实际的操作细节,这些方法可以用来对属性进行加工。
- 对象含有类属性的具体值,这就是类的实例化。正是由于属性的不同,才能区分不同的对象。在上面例子里,由于student和teacher的性别和姓名不一样,才得以区分开二人。
- 对象由属性和方法组成
- 由于php的对象是用数组来模拟的,因此我们把对象转为数组,就能看到这个对象所拥有的属性了。
print_r((array)$student); var_dump($student);
- 对象就是一堆数据。既然如此,可以把一个对象存储起来,以便需要时用。这就是对象的序列化。
$str=serialize($student); echo $str; file_put_contents('store.txt', $str); $str=file_get_contents('store.txt'); $student=unserialize($str); $student->say();
- 对象序列化后,存储的只是对象的属性。类是由属性和方法组成的,而对象则是属性的集合,由同一个类生成的不同对象,拥有各自不同的属性,但共享了类的代码空间中方法区域的代码
- 对象也是一种很普通的变量,不同的是其携带了对象的属性和类的入口。
- 而对象和数组的区别在于:对象还有个指针,指向了它所属的类。在对student对象序列化时,我们看到了“person”这几个字符,这个标识符就标志了这个对象归属于person类,故在取出这个对象后,可以立即对其执行所包含的方法。
$tom=new family($student,'peking'); echo serialize($student); echo "-----------\n"; $student_arr=array('name'=>'tom','gender'=>'male'); echo "-----------\n"; echo serialize($student_arr); print_r($tom); echo "-----------\n"; echo serialize($tom);
- 类是定义一系列属性和操作的模板,而对象则把属性进行具体化,然后交给类处理。
- 对象就是数据,对象本身不包含方法。但是对象有一个“指针”指向一个类,这个类里可以有方法。
- 方法描述不同属性所导致的不同表现。
- 类和对象是不可分割的,有对象就必定有一个类和其对应,否则这个对象也就成了没有亲人的孩子(但有一个特殊情况存在,就是由标量进行强制类型转换的object,没有一个类和它对应。此时,php中一个称为“孤儿”的stdclass类就会收留这个对象)。
参考资料
- [php核心技术与最佳实践]