PHP面向对象深入理解之二(封装、继承、多态、克隆)
来源:互联网 发布:斗牛牌型算法 编辑:程序博客网 时间:2024/06/10 05:16
1.封装
将一系列私有的特征保存起来
class Person { private $ID; public function setID($id) { $this->ID = ($id + 1)*3; } public function getID() { return $this->ID; } } $wang = new Person(); $wang->setID('123'); //我们不去关心id是如何生成的,我们只需要拿到我们想要的,这就是封装 print $wang->getID();
2.继承
继承就是把父类的东西传给下一代,就像中华文化一样,代代相传注意:所有要被继承的方法的方法名 不能和类名一样 即使大小写不同也不行
(1) 接口的继承
接口自身也允许多继承,但是父子之间方法不能同名
<?phpinterface People{ public function age();}interface Human{ public function name();}interface Person extends Human,People{ public function gender();}
类与接口之间允许多继承
<?php interface A{public function a();}interface B{public function b();}/* * 可以同时实例化多个接口 解决单继承问题 */class E implements A,B { const E1 = '15'; //类中常量使用 static $e2 = 1; //类中静态变量使用public $e3 =2; //类中普通成员变量使用 public function __construct(){ self::$e2++; } public function a(){ echo 'E1:'.self::E1."\n"; } public function b(){ echo 'e1:'.self::$e2."\n"; }}$e1 = new E();$e1->a();$e1->b();$e2 = new E();$e1->a();$e1->b();$e2->a();
(2) 抽象类/普通类的继承
类只能实现单继承<?phpabstract class A{public function $aa=1;abstract public function a1();public function aa(){ echo 'aa';} }class A2{public function a1(){ echo 'a1';}}$a2 = new A2();$a2->a1;
3. 多态
多态,同一个实体同时具有多种形式,从PHP上讲,就是允许将子类类型的对象赋值给父类类型
来看一个栗子:
<?php abstract class Animal{abstract public function say();}class Cat extends Animal{public function say(){ echo 'maio';}}class Dog extends Animal{public function say(){ echo 'wang';}}function said($animal){if($animal instanceof Animal){ $animal->say();}}said(new Cat());said(new Dog());
4. 克隆
为什么要把克隆放在这里。PHP5中有个非常重要的改变,使用new关键字new出的对象是一个指向对象句柄的id,当赋值给其他变量的时候,会有意想不到的结果
举个栗子:
<?php class A{public $aa = 2;}$a1 = new A();$a2 = $a1;$a3 = clone $a1;$a1->aa = 5;print $a2->aa,"\n";print $a3->aa,"\n";?>
结果是 3 5
为什么不是 3和3,这里的$a2获得的只是$a1对象的句柄(id),并不是对象的完整拷贝,所以,如果要使用对象的完整拷贝,请使用clone,以免获得意想不到的结果。
阅读全文
1 0
- PHP面向对象深入理解之二(封装、继承、多态、克隆)
- 深入理解js面向对象之继承
- JAVA菜鸟(二)面向对象之封装,继承,多态
- (二)面向对象之封装,继承,多态(上)
- 面向对象二 (封装 继承 多态)
- 面向对象封装,继承,多态(二)
- PHP面向对象之克隆
- 深入理解Java面向对象三大特性 封装 继承 多态
- 深入理解Java面向对象三大特性 封装 继承 多态
- 深入理解C++面向对象机制(二)虚继承
- 面向对象之封装、继承、多态
- 面向对象之封装,继承,多态
- 面向对象之封装,继承,多态
- java面向对象之封装、继承、多态
- PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
- 面向对象基础之二封装继承多态
- java面向对象四大特性之二 继承,封装
- Java程序员从笨鸟到菜鸟之(二)面向对象之封装,继承,多态(上)
- hdu1151最小路径覆盖
- 2017 Multi-University Training Contest
- 二维数组的查找
- Cookie与Session的工作原理解析
- Educational Codeforces Round 26 E
- PHP面向对象深入理解之二(封装、继承、多态、克隆)
- HDU 3460 Ancient Printer(字典树)
- Fractions Again?! UVA
- 另一种MapReduce实现矩阵乘法
- 48.图像旋转
- java-最长回文串
- [dts]DTS实例分析
- 【HDU 6048 Puzzle】 逆序对 & 思维
- 第8章 虚拟机字节码执行引擎