php怎么实现多继承

这篇文章主要介绍“php怎么实现多继承”,在日常操作中,相信很多人在php怎么实现多继承问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”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怎么实现多继承”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


标题名称:php怎么实现多继承
文章位置:http://azwzsj.com/article/iegsej.html