PHP笔记: trait 实现了一种代码复用的方法

Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。Trait 为了减少单继承语言的...

本文旨在记录,所有内容仅代表漠漠睡个人观点,大佬可绕;


先看PHP解释

Trait

PHP 实现了一种代码复用的方法,称为 trait。


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


Trait 和 Class 相似,但仅仅旨在用细粒度和一致的方式来组合功能。 无法通过 trait 自身来实例化。它为传统继承增加了水平特性的组合;也就是说,应用的几个 Class 之间不需要继承。


trait 写法与class类相同,但是trait不能被实例化,只能被引用,引用方式 在类中use

同名函数优先级:

本类 > trait > 父类

trait有方法重复时会报错,届时,可以使用instedadof进行覆盖,覆盖后,将使用覆盖名,被覆盖的可以使用as进行重命名,届时被覆盖类方法可以在本类中使用重命名的方法进行调用


上代码:

trait Demo1{
	public function A(){
		return __METHOD__;
	}
}
trait Demo2{
	public function A(){
		return __METHOD__;
	}
}
class Test{
	public function A(){
		return __METHOD__;
	}
}
class Test1 extends Test{
	use Demo1,Demo2{
		Demo1::A insteadof Demo2;
		Demo2::A as Demo2A;
	}
	// public function A(){
	// 	return __METHOD__;
	// }
	public function B(){
		return $this->A();
	}
	public function C(){
		return $this->Demo2A();
	}
}
$obj = new Test1;
print_r($obj->B());

说明:

使用__FUNCTION__仅传回函数名称

使用__METHOD__传回类名称与函数名称

image.png

评论