这时候如果想要保留 A 的 foo 方法,可以用 as 定义别名来进行调用 。注意,起别名仅仅代表可以用别名来调用该方法,仍然需要用 insteadof 处理冲突
class Bar {use A, B {B::foo insteadof A;// 用 B 的 foo 方法来代替 AA::foo as aFoo; // A 的foo 方法用 aFoo 来调用}}$bar = new Bar();echo $bar->aFoo(); // A foo
as 关键字还可以用来更改方法法的访问控制
<?phpTrait A {public function foo(){return "A foo";}}class Bar {use A {A::foo as private;}}$bar = new Bar();echo $bar->foo(); // Fatal error: Uncaught Error: Call to private method Bar::foo()
这两者可以结合起来用,这时候原有方法的访问控制就不会受到影响
<?phpTrait A {public function foo(){return "A foo";}}class Bar {use A {A::foo as private aFoo;}}$bar = new Bar();echo $bar->foo(); // A foo,照常调用echo $bar->aFoo(); // 被设置成私有方法,因此报错 。Fatal error: Uncaught Error: Call to private method
关注我吧,每日不断更新内容!!!
【Life PHP 核心特性 - Trait】
推荐阅读
- Python编程语言的核心是什么?
- 第九颗行星是否存在? 第九大行星是黑洞
- 手写微服务核心技术——负载均衡算法
- 恒品茗茶的品牌发展,共筑浮梁茶核心品牌
- windows 10 下docker布置nginx+php环境,用宿主WEB目录负载均衡
- java多线程编程的核心——AQS独占模式原理解析
- CDN的本质只是加速器?其实它才是互联网的核心精神的集大成者
- 月球的光芒 月球闪光之谜这篇文章
- 黑洞能把地球吞噬吗 黑洞的吞噬范围
- 地球和月球照片 月球拍地球的照片