PHP继承调用方法的问题

发布于 2022-09-05 04:38:28 字数 613 浏览 19 评论 0

say方法的访问权限是public时输出:BB

<?php

    class A
    {
        public function __construct()
        {
            var_dump($this);
            $this->say();
        }

        private function say()
        {
            echo __CLASS__;
        }
    }

    class B extends A
    {
        public function say()
        {
            echo __CLASS__;
        }
    }

    $b = new B();

---------- Debug PHP ----------
object(B)#1 (0) {
}
A

输出完成 (耗时 0 秒) - 正常终止
我将代码改成这样, 但是var_dump出来的对象是B, 为什么调用的还是A的方法?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

糖粟与秋泊 2022-09-12 04:38:28

多看文档

继承已为大家所熟知的一个程序设计特性,PHP 的对象模型也使用了继承。继承将会影响到类与类,对象与对象之间的关系。

比如,当扩展一个类,子类就会继承父类所有公有的和受保护的方法。除非子类覆盖了父类的方法,被继承的方法都会保留其原有功能。

继承对于功能的设计和抽象是非常有用的,而且对于类似的对象增加新功能就无须重新再写这些公用的功能。

注意关键点, [子类就会继承父类所有公有的和受保护的方法], 也就是说, 当方法为 public 的时候, 子类覆盖了父类的 say, 当方法为 private 时, 子类不会覆盖父类的方法

还有, 你给的示例代码, 第二段并没有 private

http://php.net/manual/zh/lang...


额, 感谢采纳, 受之有愧. 对于修改后的问题, 只是有些猜想的评论里, 期待大神解答

享受孤独 2022-09-12 04:38:28

private是不可以被继承的,是私有的,所以是AB,是父类。

而public是可以被继承、改写,是公有的,所以是BB

小矜持 2022-09-12 04:38:28

你这两段长得一毛一样啊..

你可以这样看

<?php

    class A
    {
        public function __construct()
        {
            $this->say();
        }

        private function say()
        {
            echo 1;
            echo __CLASS__;
        }
    }

    class B extends A
    {
        public function __construct()
        {
            parent::__construct();
            $this->say();
        }

        public function say()
        {
            echo 2;
            echo __CLASS__;
        }
    }


    $b = new B();

输出1A2B; public的话就是2B2B;

你定义成private私密的,继承它的子类也是无法访问的.而且你两个say的命名一样,就保留了父类的say和子类的say; 你设成public的话,new B子类的say覆盖了父类的say

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文