【发布时间】:2021-02-27 18:38:19
【问题描述】:
在下面的代码中,一个子实例被传递给由父类类型提示的函数“f”。我希望在函数中看到父对象(基于我们从 c++ 中的 oop 知道的),但是使用 PHP,我收到了子对象。谁能给我解释一下?
class ParentClass
{
}
class ChildClass extends ParentClass
{
}
function f(ParentClass $p)
{
var_dump($p); // output: object(ChildClass)#1 (0) { }
}
f(new ChildClass);
【问题讨论】:
-
根据我对 C++ 中 OOP 的了解,您还将获得 C++ 中子类的实例...
-
@obe 当类型提示子对象给父对象时,类型不应该改为父对象吗?
-
PHP 中的对象不能在运行时更改它们的类型,但这应该不是问题。派生(子)类的对象应该在需要父类对象的任何上下文中正确运行。这称为里氏替换原则。
-
C++ 完全一样。将对象的 runtime 类型传递给函数时,它不会改变,无论函数期望接收的形式参数的类型如何。只有编译时类型不同。