PHP经验分享

面向对象的特征是什么?

2020-01-12  本文已影响0人  十年磨一剑1111

面向对象的主要特征有抽象,继承,封装和多态
1.抽象:说到抽象大家可能会联想到抽象类,抽象方法之类的。这样有助于大家理解,就是不去定义具体的实现,比如定义一个方法,没有具体的实现,它的实现由子类来完成,不同的子类可能有不同的具体实现,但是都拥有同一个方法。

<?php
abstract class Test {
        public abstract function a ();
}

2.继承:这个有点类似遗传学,同样的,如果一个类继承了另外一个类,也就继承了父类的方法或者实例变量,并且子类是可以修改或者增加新的方法以适应新的需要。

<?php
class A {
    private $a = 1;  //只能在类的内部能访问,子类不能访问,可以理解为不被子类继承
    protected $b = 2; //可以在类的内部,或者子类中可以访问
    public $c = 3;  //类的内部,子类中,类的外部都可以访问
        private function t1 () {
          echo "this is t1 function\r\n";
    }
    public  function t2 () {
          echo "this is t2 function\r\n";
    }
   public   function t3 () {
          echo "this is t3 function\r\n";
    }
}

class B extends A {
     public function t3() {
           echo "this is sub t3 function\r\n";
    }
}

$foo = new A();
$bar = new B();
$foo->t2();
$bar->t2();
$foo->t3();
$bar->t3();

看下输出结果:


print.png

3.封装:封装就是对类的内部的变量,方法加了保护,我们经常会看到的访问控制权限有,private,protected,public 这三种,具体的描述请看上面的那个例子里面的注释。

4.多态:多态是指允许不同类的对象对同一消息做出不同的响应,比如在开完会后老板叫大家回去继续工作,假设员工来自不同的部门,那实际上不同的部门负责不同的工作,老板并没有吩咐大家具体做什么工作,具体的工作由每个部门自行完成。因为不同的语言由不同的特性,因此实现多态的方式也会不一样。我们重点来看下php的实现:

<?php
abstract class employee { 
         abstract function working();
  }
class teacher extends employee {
       public function working() {
              echo '教书';
       }
}
class coder extends employee {
       public function working() {
              echo '敲代码';
       }
}

function doprint($obj) {
      if (get_class($obj) == 'employee') {
                        echo 'Error';
      } else {
                   $obj->working();
      }
}
doprint(new teacher());
doprint(new coder());
doprint(new employee());

看到这里,有同学可能会说那我可以直接调用coder类或者teacher类的working()方法,岂不是更快?,确实是可以,但是这种调用方法不是我们要说的多态。
思考:
1.其他语言多态的实现方式,比如C,C++,Java

上一篇 下一篇

猜你喜欢

热点阅读