PHP中的traits实现代码复用使用实例
PHP5.4后新增traits实现代码复用机制,Trait和类相似,但不能被实例化,无需继承,只需要在类中使用关键词use引入即可,可引入多个Traits,用','隔开。 (1)Trait简单使用trait A {
public $var1 = 'test1'; public function test1() { echo 'trait A::test1()'; } } trait B { class C { $c = new C(); (2)优先级问题Trait会覆盖继承的方法,当前类会覆盖Trait方法。class B {
public function test() { echo 'B::test()'; } public function test1() { echo 'B::test1()'; } } class C extends B{ use A; public function test() { echo 'c::test()'; } } $c = new C(); (3)多个Trait冲突问题如果没有解决冲突,会产生致命错误; 可用insteadof来明确使用冲突中哪一个方法; 可用as操作符将其中一个冲突方法另起名;trait B {
public function test() { echo 'B::test()'; } } class C { $c = new C(); (4)as可用来修改方法访问控制// 修改 sayHello 的访问控制
class A { use HelloWorld { sayHello as protected; } } // 给方法一个改变了访问控制的别名 $b = new A(); (5)Trait中使用Traittrait B {
public function test2() { echo 'test2'; } } trait C { class D { $d = new D(); (6)Trait支持抽象方法、支持静态方法、不可以直接定义静态变量,但静态变量可被trait方法引用。abstract public function test2(); //可定义抽象方法
} class B { } $b = new B(); (7)Trait可定义属性,但类中不能定义同样名称属性class B { use A; public $test2; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |