• 技术文章 >后端开发 >PHP问题

    PHP如何多继承

    (*-*)浩(*-*)浩2019-09-20 14:20:19原创1470

    php入门到就业线上直播课:进入学习

    记得有一道面试题问php是否支持多继承?

    答案:不可以,只支持单继承。

    如何实现多继承呢?

    答案:可以使用 interface 或 trait 实现 。(推荐学习:PHP编程从入门到精通

    为什么会想到这个问题,因为想到如果类继承多个接口,然后他们之间还有相同的属性和方法会引用谁的方法或属性,谁又会被覆盖?

    总结:

    1.使用 interface 声明类不能被实例化,并且属性必须是常量,方法不能有方法体 

    2.trait 声明的类不能被实例化,由use引入,会覆盖父类的相同属性及方法,如果有多个use,那么按顺序下面的覆盖最上面的相同的属性及方法

    接口是什么?

    使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。

    接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。

    接口中定义的所有方法都必须是公有,这是接口的特性。

    trait是什么?

    看上去既像类又像接口,其实都不是,Trait可以看做类的部分实现,可以混入一个或多个现有的PHP类中,

    其作用有两个:表明类可以做什么;提供模块化实现。

    Trait是一种代码复用技术,为PHP的单继承限制提供了一套灵活的代码复用机制。

    Trait为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类复用method. Trait 和Class 组合的语义定义了一种减少复杂性的方式,避免传统的多继承和 Mixin 类相关典型问题。

    Trait 和 Class 相似,但仅仅旨在用细粒度和一致的方式来组合功能。 无法通过 trait 自身来实例化。它为传统继承增加了水平特性的组合;也就是说,应用的几个 Class 之间不需要继承。

    优先级

    从基类继承的成员被 trait 插入的成员所覆盖。优先顺序是来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法。

    class Base {
        public function sayHello() {
            echo 'Hello ';
        }
    }
    trait SayWorld {
        public function sayHello() {
            parent::sayHello();
            echo 'World!';
        }
    }
    class MyHelloWorld extends Base {
        use SayWorld;
    
    }
    $o = new MyHelloWorld();
    $o->sayHello();

    通过逗号分隔,在 use 声明列出多个 trait,可以都插入到一个类中。

    以上就是PHP如何多继承的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:PHP
    上一篇:php如何翻转字符串 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• 细数PHP中16个高危函数• php如何实例化一个类• thinkphp常用系统配置大全• 大括号在php中的一些作用
    1/1

    PHP中文网