PHP父作用域解析运算符

PHP父作用域解析运算符,php,class,scope,operator-keyword,Php,Class,Scope,Operator Keyword,我想知道应该如何解释以下代码(源代码:) 类的对象OtherClass也是类的对象MyClass,因为类OtherClass扩展了类MyClass。它具有MyClass的所有属性和方法,但其中一些方法可能在OtherClass中重新定义 作用域解析运算符既用于访问静态类成员和方法(使用类名或),也用于访问父类中定义的方法(使用)。parent::myFunc()不是一个静态调用,但是它使用了相同的操作符,这有点令人困惑。仅当您已重写该方法并希望调用父方法时,才需要此运算符 将有一个OtherCl

我想知道应该如何解释以下代码(源代码:)


类的对象
OtherClass
也是类的对象
MyClass
,因为类
OtherClass
扩展了类
MyClass
。它具有
MyClass
的所有属性和方法,但其中一些方法可能在
OtherClass
中重新定义

作用域解析运算符既用于访问静态类成员和方法(使用类名或),也用于访问父类中定义的方法(使用)。

parent::myFunc()
不是一个静态调用,但是它使用了相同的操作符,这有点令人困惑。仅当您已重写该方法并希望调用父方法时,才需要此运算符

将有一个OtherClass的新实例(对象)。但同时会有父类的实例吗?我该怎么解释


因为
OtherClass
扩展了
MyClass
,所以您构建的单个对象同时是这两个类的实例

请参阅…双冒号是一个令牌,允许访问类的静态、常量和重写属性或方法。它被称为范围解析运算符,而不是“静态访问运算符”…它解析某些内容,与静态访问几乎没有关系。感谢您的回复,它使您的回复变得有意义。感谢您的回复
<?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();
?>