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,以免获得意想不到的结果。









原创粉丝点击