| PHP继承继承使用关键字 extends子类继承父类时, 将会覆盖掉父类的同名属性或方法, 包括魔术方法(__construct)子类继承父类时, 同名的属性或方法的修饰符只能向宽松的方法延伸(父类为 protected, 子类可以为protected或public, 不能为private)子类可以使用 parent访问被覆盖的父类方法
  
 parent::__construct();
 static关键字修饰的静态成员没有覆盖的动作, 通过类名或self进行访问, 父类可以使用static访问最终实例化对象所属类的成员
  
 static::$nickname
 抽象抽象使用关键字 abstractPHP 5 支持抽象类和抽象方法。定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)
 接口接口使用关键字 interface和implements使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。 由于接口(interface)和类(class)、trait 共享了命名空间,所以它们不能重名接口中定义的所有方法都必须是公有,这是接口的特性。接口可以定义魔术方法,以便要求类(class)实现这些方法, 虽然没有禁止,但是强烈建议不要在接口中使用构造器接口中也可以定义常量。接口常量和类常量的使用完全相同,但是不能被子类或子接口所覆盖。接口支持多继承
  
 interface INT3 extends INT1, INT2{}
  
 class Child extends Base implements INT1, INT2
 traittrait 使用关键字 traitTrait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用 method。Trait 和 Class 组合的语义定义了一种减少复杂性的方式,避免传统多继承和 Mixin 类相关典型问题。Trait 和 Class 相似,但仅仅旨在用细粒度和一致的方式来组合功能。 无法通过 trait 自身来实例化。它为传统继承增加了水平特性的组合;也就是说,应用的几个 Class 之间不需要继承。从基类继承的成员会被 trait 插入的成员所覆盖。优先顺序是来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法。使用 insteadof解决重名的冲突, 使用as修改名称也可以解决冲突,as还可以修改访问控制级别(不受宽松的限制, 任意修改)
 	trait Trait1
	{
		public function print()
		{
			echo 'trait1';
		}
	}
	
	trait Trait2
	{
		public function print()
		{
			echo 'trait2';
		}
	}
	
	class Child
	{
		public function __construct() {
			$this->print();
			$this->print2();
		}
	
		use Trait1, Trait2 {
			Trait1::print insteadof Trait2;
			Trait1::print as protected;
			Trait2::print as protected print2;
		}
	}
	
	$instant = new Child();
 |