下述代码展示了 PHP 中类的继承、trait 的使用以及如何在 trait 方法中调用父类(基类)的方法。具体如下:
- 定义一个基类
Base
:
这个基类 Base
定义了一个公共方法 sayHello()
,它简单地输出 "Hello "。
- 定义一个 trait
SayWorld
:
这里创建了一个 trait 叫做 SayWorld
,它也包含一个方法 sayHello()
。在 SayWorld
的 sayHello()
方法内部,使用了 parent::sayHello();
这行代码。这里的 parent::
是 PHP 中用来调用父类(基类)方法的关键字。这行代码的意思是调用当前类(在这个上下文中是使用了此 trait 的类)父类的 sayHello()
方法。这样做的目的是在执行当前 trait 中的方法之前,先执行基类中同名方法的逻辑。
- 定义一个继承自
Base
类并使用SayWorld
trait 的类MyHelloWorld
:
类 MyHelloWorld
继承自 Base
类,并使用了 SayWorld
trait。由于 trait 中的方法覆盖了基类中的同名方法,但又在其内部通过 parent::sayHello();
调用了基类方法,实现了功能的扩展而不是完全替代。
- 实例化
MyHelloWorld
并调用sayHello()
方法:
创建 MyHelloWorld
类的实例 $o
,并调用其 sayHello()
方法。因为 MyHelloWorld
类通过 use SayWorld;
使用了 SayWorld
trait,所以实际上调用的是 trait 中定义的 sayHello()
方法。这个方法首先通过 parent::sayHello();
调用了基类 Base
的 sayHello()
输出 "Hello ",然后继续输出 “World!”,最终输出结果为 “Hello World!”。