我想知道如何解释以下代码(来源:http://www.php.net/manual/en/language.oop5.paamayim-nekudotayim.php)
<?php
class MyClass
{
protected function myFunc() {
echo "MyClass::myFunc()\n";
}
}
class OtherClass extends MyClass
{
// Override parent's definition
public function myFunc()
{
// But still call the parent function
parent::myFunc();
echo "OtherClass::myFunc()\n";
}
}
$class = new OtherClass();
$class->myFunc();
?>
我的问题是:为什么范围解析运算符('::')用于访问父函数:
父:: myFunc的();
对我来说,双冒号表示静态成员/方法。创建OtherClass对象时:
$ class = new OtherClass();
将会有一个OtherClass的新实例(对象)。但是同时会有父类的实例吗?我该如何解释这个?
我理解从扩展的OtherClass创建新对象的想法,但我应该如何解释它的父类:像静态类或像对象(类的副本)?
我希望我的问题有道理。
答案 0 :(得分:1)
类OtherClass
的对象也是类MyClass
的对象,因为类OtherClass
扩展了类MyClass
。它具有MyClass
的所有属性和方法,但某些方法可能会在OtherClass
中重新定义。
范围解析运算符既用于访问静态类成员和方法(使用类名self
或static
),也用于访问父类中定义的方法(使用{{3} })。
答案 1 :(得分:0)
parent::myFunc();
不是静态调用,但它使用相同的运算符有点令人困惑。如果已覆盖方法并且想要调用父方法,则只需要此运算符。
将会有一个OtherClass的新实例(对象)。但是同时会有父类的实例吗?我该如何解释这个?
由于OtherClass
扩展MyClass
,您构造的单个对象同时是这两个类的实例。