PHP父范围解析运算符

时间:2018-01-26 09:42:28

标签: php class scope operator-keyword

我想知道如何解释以下代码(来源: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创建新对象的想法,但我应该如何解释它的父类:像静态类或像对象(类的副本)?

我希望我的问题有道理。

2 个答案:

答案 0 :(得分:1)

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

范围解析运算符既用于访问静态类成员和方法(使用类名selfstatic),也用于访问父类中定义的方法(使用{{3} })。

答案 1 :(得分:0)

parent::myFunc();不是静态调用,但它使用相同的运算符有点令人困惑。如果已覆盖方法并且想要调用父方法,则只需要此运算符。

  

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

由于OtherClass扩展MyClass,您构造的单个对象同时是这两个类的实例。