Boj*_*vić 14 php oop inheritance
在查看一些PHP代码时,我发现了一件奇怪的事情.以下是它的简单示例说明:
文件A.php:
<?php
class A{
public function methodA(){
echo $this->B;
}
}
?>
Run Code Online (Sandbox Code Playgroud)
文件B.php:
<?php
class B extends A{
public $B = "It's working!";
}
?>
Run Code Online (Sandbox Code Playgroud)
文件test.php:
<?php
require_once("A.php");
require_once("B.php");
$b = new B();
$b->methodA();
?>
Run Code Online (Sandbox Code Playgroud)
运行test.php打印出"它正在工作!",但问题是它为什么有效?:)这是一个功能还是一个bug?类A中的方法方法A也可以调用B类中不应该在OOP中工作的方法.
Bra*_*rad 12
你只是在实例化课程B
.A
暂时忽略,并假装这methodA()
是课堂的一部分B
.
当类B
扩展时A
,它会获得所有A
的功能. $this->B
在代码运行之前不进行评估,而不是之前.因此,不会发生错误,并且不会出现$this->B
在类中B
.
PHP是一种动态语言.方法和数据成员在运行时进行评估.当您调用方法或访问成员时,PHP实际上会查找排序的哈希表,以确定是否可以在此对象上访问此方法或成员,这可以是继承层次结构中的任何位置.
而且不仅仅是继承,你总是可以在运行时将任意数据分配给一个对象,并且类中的代码仍然可以使用$ this->某些东西来访问它,其中"某些东西"甚至不存在于类中.