我已经编写了这段代码来检查我的应用程序的行为,我不明白为什么这段代码可以工作。我有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”从子类中调用方法。为什么?在哪里可以读到这个问题?
答案 0 :(得分:2)
尝试从基类(父类)访问子值是一个错误的设计。如果将来有人会基于您的父类创建另一个类,而忘记创建您尝试在父类中访问的特定属性该怎么办?
据我了解,扩展类时,子类具有Main class object
可用的所有属性和方法,这些属性可以在类外部访问。
因此,当您创建Main class
对象时,您的类在内部看起来像
class Main
{
public function checkUnexist()
{
return 'UNEXIST METHOD CALLED';
}
public function check(){
return $this->checkUnexist();
}
}
检查方法存在,您将得到响应。尝试使方法checkUnexist
private
或protected
会有所不同。