这篇文章主要介绍“php怎么实现多继承”,在日常操作中,相信很多人在php怎么实现多继承问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php怎么实现多继承”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
1、trait是PHP 5.4新增的代码复用的方法,Trait是为类似 PHP 的单继承语言而准备的一种代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用 method。Trait 和 Class 组合的语义定义了一种减少复杂性的方式,避免传统多继承和 Mixin 类相关典型问题。
/** * Traits可以多重继承,可以看做是一种加强型的接口 */ trait Hello { public function sayHello() { echo 'Hello '; } public function aaa() { echo 'AAA'; } } trait World { public function sayWorld() { echo 'World'; } } class MyHelloWorld { use Hello, World; public function sayExclamationMark() { echo '!'; } // 会覆盖掉Hello中的aaa方法 public function aaa() { echo 'AAAAA'; } } $obj = new MyHelloWorld(); $obj->sayHello(); $obj->sayWorld(); $obj->sayExclamationMark(); $obj->aaa(); // 输出: // Hello World!AAAAA
2、通过组合的模式来实现。
/** * 使用组合的方式也可以达到 1_12_trait.php 的效果 */ class Hello2 { public function sayHello() { echo 'Hello '; } public function aaa() { echo 'AAA'; } } class World2 { public function sayWorld() { echo 'World'; } public function aaa() { echo 'AAAA'; } } class MyHelloWorld2 { public $obj = []; public function __construct() { $this->obj['Hello2'] = new Hello2(); $this->obj['World2'] = new World2(); } public function sayExclamationMark() { echo '!'; } public function __call($name, $arguments) { foreach ($this->obj as $value) { if (method_exists($value, $name)) { return $value->$name(); // 也可以用 return call_user_func([$value, $name]); } } if (!method_exists($this->obj['Hello2'], $name) && !method_exists($this->obj['World2'], $name)) { echo "\r\n不存在此方法"; } return true; } // 会覆盖其他类的aaa方法 public function aaa() { echo 'AAAAA'; } } $obj = new MyHelloWorld2(); $obj->sayHello(); $obj->sayWorld(); $obj->saywhat(); $obj->aaa(); $obj->sayExclamationMark(); // 输出: // Hello World!AAAAA
到此,关于“php怎么实现多继承”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。