PHP中的traits实现代码复用使用实例
这篇文章主要介绍了PHP中的traits实现代码复用使用实例,本文讲解了Trait简单使用、优先级问题、多个Trait冲突问题、as可用来修改方法访问控制、Trait中使用Trait等内容,需要的朋友可以参考下
PHP5.4后新增traits实现代码复用机制,Trait和类相似,但不能被实例化,无需继承,只需要在类中使用关键词use引入即可,可引入多个Traits,用','隔开。
(1)Trait简单使用
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
trait A { public $var1 = 'test1'; public function test1() { echo 'trait A::test1()'; } }
trait B { public $var2 = 'test2'; public function test2() { echo 'trait B::test2()'; } }
class C { use A,B; }
$c = new C(); echo $c->var1; //test1 $c->test2(); //trait B::test2() |
(2)优先级问题
Trait会覆盖继承的方法,当前类会覆盖Trait方法。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
trait A { public $var1 = 'test'; public function test() { echo 'A::test()'; } public function test1() { echo 'A::test1()'; } }
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(); $c->test(); //c::test() $c->test1(); //A::test1() |
(3)多个Trait冲突问题
如果没有解决冲突,会产生致命错误;
可用insteadof来明确使用冲突中哪一个方法;
可用as操作符将其中一个冲突方法另起名;
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
trait A { public function test() { echo 'A::test()'; } }
trait B { public function test() { echo 'B::test()'; } }
class C { use A,B { B::test insteadof A; B::test as t; } }
$c = new C(); $c->test(); //B::test() $c->t(); //B::test() 可以用as另起名 |
(4)as可用来修改方法访问控制
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
trait HelloWorld { public function sayHello () { echo 'Hello World!' ; } }
// 修改 sayHello 的访问控制 class A { use HelloWorld { sayHello as protected; } }
// 给方法一个改变了访问控制的别名 // 原版 sayHello 的访问控制则没有发生变化 class B { use HelloWorld { sayHello as private myPrivateHello ; } }
$b = new A(); $b->sayHello(); //Fatal error: Call to protected method A::sayHello() from context '' |
(5)Trait中使用Trait
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
trait A { public function test1() { echo 'test1'; } }
trait B { public function test2() { echo 'test2'; } }
trait C { use A,B; }
class D { use C; }
$d = new D(); $d->test2(); //test2 |
(6)Trait支持抽象方法、支持静态方法、不可以直接定义静态变量,但静态变量可被trait方法引用。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
trait A { public function test1() { static $a = 0; $a++; echo $a; }
abstract public function test2(); //可定义抽象方法 }
class B { use A; public function test2() {
} }
$b = new B(); $b->test1(); //1 $b->test1(); //2 |
(7)Trait可定义属性,但类中不能定义同样名称属性
?
1 2 3 4 5 6 7 8 |
trait A { public $test1; }
class B { use A; public $test2; |

DependencyInjection(DI)inPHPenhancescodeflexibilityandtestabilitybydecouplingdependencycreationfromusage.ToimplementDIeffectively:1)UseDIcontainersjudiciouslytoavoidover-engineering.2)Avoidconstructoroverloadbylimitingdependenciestothreeorfour.3)Adhe

到Improveyourphpwebsite的实力,UsEthestertate:1)emplastOpCodeCachingWithOpcachetCachetOspeedUpScriptInterpretation.2)优化的atabasequesquesquesquelies berselectingOnlynlynnellynnessaryfields.3)usecachingsystemssslikeremememememcachedisemcachedtoredtoredtoredsatabaseloadch.4)

是的,itispossibletosendMassemailswithp.1)uselibrarieslikeLikePhpMailerorSwiftMailerForeffitedEmailSending.2)enasledeLaysBetemailStoavoidSpamflagssspamflags.3)sylectynamicContentToimpovereveragement.4)

DependencyInjection(DI)inPHPisadesignpatternthatachievesInversionofControl(IoC)byallowingdependenciestobeinjectedintoclasses,enhancingmodularity,testability,andflexibility.DIdecouplesclassesfromspecificimplementations,makingcodemoremanageableandadapt

使用PHP发送电子邮件的最佳方法包括:1.使用PHP的mail()函数进行基本发送;2.使用PHPMailer库发送更复杂的HTML邮件;3.使用SendGrid等事务性邮件服务提高可靠性和分析能力。通过这些方法,可以确保邮件不仅到达收件箱,还能吸引收件人。

计算PHP多维数组的元素总数可以使用递归或迭代方法。1.递归方法通过遍历数组并递归处理嵌套数组来计数。2.迭代方法使用栈来模拟递归,避免深度问题。3.array_walk_recursive函数也能实现,但需手动计数。

在PHP中,do-while循环的特点是保证循环体至少执行一次,然后再根据条件决定是否继续循环。1)它在条件检查之前执行循环体,适合需要确保操作至少执行一次的场景,如用户输入验证和菜单系统。2)然而,do-while循环的语法可能导致新手困惑,且可能增加不必要的性能开销。

在PHP中高效地哈希字符串可以使用以下方法:1.使用md5函数进行快速哈希,但不适合密码存储。2.使用sha256函数提高安全性。3.使用password_hash函数处理密码,提供最高安全性和便捷性。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

Atom编辑器mac版下载
最流行的的开源编辑器

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。