每天5分钟,细读PHP手册-10

版权声明:欢迎转载,请附上原文链接 https://blog.csdn.net/hfut_wowo/article/details/88963084

static关键字

  • 静态属性不能通过一个类已实例化的对象来访问(但静态方法可以);
  • 为了兼容 PHP 4,如果没有指定访问控制,属性和方法默认为公有;
  • 由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用;
  • 静态属性不可以由对象通过 -> 操作符来访问;
  • 用静态方式调用一个非静态方法会导致一个 E_STRICT 级别的错误;
  • 自 PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字 self,parent 或 static;

抽象类

  • PHP 5 支持抽象类和抽象方法。定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
  • 继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。
  • 此外方法的调用方式必须匹配,即类型和所需参数数量必须一致。

对象接口

使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。接口加上类型约束,提供了一种很好的方式来确保某个对象包含有某些方法。

  • 接口中定义的所有方法都必须是公有,这是接口的特性。
  • 类中必须实现接口中定义的所有方法,否则会报一个致命错误;
  • 实现多个接口时,接口中的方法不能有重名;
  • 接口也可以继承,通过使用 extends 操作符;
  • 类要实现接口,必须使用和接口中所定义的方法完全一致的方式。否则会导致致命错误;
  • 接口中也可以定义常量。接口常量和类常量的使用完全相同,但是不能被子类或子接口所覆盖;

trait

Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用 method。Trait 和 Class 组合的语义定义了一种减少复杂性的方式,避免传统多继承和 Mixin 类相关典型问题。

  • 从基类继承的成员会被 trait 插入的成员所覆盖。优先顺序是来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法;
  • 通过逗号分隔,在 use 声明列出多个 trait,可以都插入到一个类中;
  • 如果两个 trait 都插入了一个同名的方法,如果没有明确解决冲突将会产生一个致命错误;
  • 为了解决多个 trait 在同一个类中的命名冲突,需要使用 insteadof 操作符来明确指定使用冲突方法中的哪一个;
  • 为了对使用的类施加强制要求,trait 支持抽象方法的使用;
  • Traits 可以被静态成员静态方法定义;
  • Trait 同样可以定义属性;
  • Trait 定义了一个属性后,类就不能定义同样名称的属性,否则会产生 fatal error;

匿名类

  • 可以传递参数到匿名类的构造器,也可以扩展(extend)其他类、实现接口(implement interface),以及像其他普通的类一样使用 trait;
  • 匿名类被嵌套进普通 Class 后,不能访问这个外部类(Outer class)的 private(私有)、protected(受保护)方法或者属性。 为了访问外部类(Outer class)protected 属性或方法,匿名类可以 extend(扩展)此外部类。 为了使用外部类(Outer class)的 private 属性,必须通过构造器传进来;

猜你喜欢

转载自blog.csdn.net/hfut_wowo/article/details/88963084