PHP OOP 如何访问类父属性范围解析运算符 (::).


PHP OOP how to access class parent property Scope Resolution Operator (::)?

如何像方法一样从类内部访问类OtherClass中的属性var myFunc (parent::myFunc();)

<?php
class MyClass
{
    public $var = 'A';
    protected function myFunc()
    {
        echo "MyClass::myFunc()'n";
    }
}
class OtherClass extends MyClass
{
    public $var = 'B';
    // Override parent's definition
    public function myFunc()
    {
        // But still call the parent function
        parent::myFunc();
        echo "OtherClass::myFunc()'n";
    }
}
$class = new OtherClass();
$class->myFunc();
你不能

,因为没有单独的变量。 OtherClass扩展MyClass因此OtherClass包含所有MyClass功能+来自OtherClass的其他内容,但是保持对父方法的访问(通过parent::)非常有意义(即允许链接),然后拥有多个同名变量会引起巨大的头痛,而不会带来任何好处。

为 var 创建 getter 和 setter 方法。

class MyClass
{
    private $var = 'A';
    public function getVar()
    {
        return $this->var;
    }
    public function setVar($var)
    {
        $this->var = $var;
    }
    protected function myFunc()
    {
        echo "MyClass::myFunc()'n";
    }
}

然后,如果您不覆盖那里的 getter 和 setter,则可以在 OtherClass 中使用 $this->getVar()。或者,如果您这样做,则可以在OtherClass中使用parent::getVar()