php中的类关键字

trait / implements / interface / abstract / extends

trait

trait是php5.4以后新增加的一个功能,可以将多个类中,共用的一些属性和方法提取出来做来公共trait类,就像是装配汽车的配件,如果你的类中要用到这些配件,就直接用use导入就可以了,相当于把trait中的代码复制到当前类中.

 trait test {
    function helllo(){
        echo 'hello ';
    }
 } 
 class test2 {
    use test;
    function world(){
        echo 'world';
    }
 }
 $r = new test2;
 $r->hello();
 $r->world();

abstract 抽象类

abstract 定义的类 不仅可以有抽象函数,还可以有具体的函数实现
抽象类不能被直接实例化。
抽象类中只定义(或部分实现)子类需要的方法。
子类可以通过继承抽象类并通过实现抽象类中的所有抽象方法,使抽象类具体化
如果子类需要实例化,前提是它实现了抽象类中的所有抽象方法。
如果子类没有全部实现抽象类中的所有抽象方法,那么该子类也是一个抽象类,必须在 class 前面加上 abstract 关键字,并且不能被实例化

abstract class A {
    abstract public function method1();
    abstract public function method2();
    public function method3() {
        //... code ...
    }
}
class B extends A {   
    function test3(){
        echo 45454;
    }
    function method1(){}
    // function method2(){} 
}
注:上例中B没有全部实现A中的抽象方法,php就会报错
    php: error
    Class B contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (A::method2) in Standard input code

interface 接口

一种成员属性全部为抽象或常量的特殊抽象类。

接口其实是一种规范,在结构中规定一些方法,
但不用实现,目的是想让一个类来继承并实现它,严格来说不是继承,就是一个类来实现它。接口中除了方法声明外,还可以有常量

interface Computer{
  const CAND='78849';
  public function aaa();
  public function bbb();
} 
class noteBook implements Computer{
    public function aaa(){
          echo 'I am lilei';
    }
    public function bbb(){
          echo 'I am hanmeimei';
    }
}
也就是说接口规定方法名称,实现这个接口的子类中必须全部实现接口里面定义的方法

extends 继承

 子类继承父类就用 extends 关键字

implements

实现接口 和interface配合使用

发表评论

电子邮件地址不会被公开。 必填项已用*标注