PHP代码的意外继承行为

时间:2019-04-21 15:36:08

标签: php

我已经编写了这段代码来检查我的应用程序的行为,我不明白为什么这段代码可以工作。我有2个班级和1个切入点

PHP 7.2

class Base{

    public function check(){
       return $this->checkUnexist();
    }

}

class Main extends Base
{
    public function checkUnexist()
    {
        return 'UNEXIST METHOD CALLED';
    }
}

$main = new Main();
echo $main->check();

预期结果不存在,称为方法。但是它用“ this”从子类中调用方法。为什么?在哪里可以读到这个问题?

1 个答案:

答案 0 :(得分:2)

  

尝试从基类(父类)访问子值是一个错误的设计。如果将来有人会基于您的父类创建另一个类,而忘记创建您尝试在父类中访问的特定属性该怎么办?

据我了解,扩展类时,子类具有Main class object可用的所有属性和方法,这些属性可以在类外部访问。

因此,当您创建Main class对象时,您的类在内部看起来像

class Main
{
    public function checkUnexist()
    {
     return 'UNEXIST METHOD CALLED';
    }

    public function check(){
     return $this->checkUnexist();
    }
}

检查方法存在,您将得到响应。尝试使方法checkUnexist privateprotected会有所不同。