2

在 php 文档中它说:

范围解析运算符(也称为 Paamayim Nekudotayim)或更简单的术语是双冒号,是一个允许访问类的静态、常量和重写属性或方法的标记。

当我尝试访问被覆盖的(非静态的)父属性时出现错误:

class foo
{
    public $bar = 'foobar';
}

class baz extends foo
{
    public $bar = 'bazbar';

    public function get_bar()
    {
        echo parent::$bar; //Fatal error:  Access to undeclared static property: foo::$bar
    }
}

$baz = new baz;
$baz->get_bar();
4

2 回答 2

1

首先,::与静态属性一起使用,而不是实例属性。
其次,尽管您可以使用反射来完成它(请参阅下面的代码),但我看不到访问父实例属性的任何意义,这polymorphism是为了。

class foo
{
    public $bar='foobar';
}
class bar extends foo
{
    public $bar='bazbar';
    function get_bar()
    {
        $thisClass = new ReflectionClass($this);
        $parentClass = $thisClass->getParentClass();
        $props = $parentClass->getDefaultProperties();
        return $props['bar'];
    }
}

$b = new bar();
echo $b->get_bar(); // foobar
于 2013-10-31T06:40:43.067 回答
0
class foo
{
  public $bar = 'foobar';
}

制作 $bar 静态变量。您可以使用解析运算符(::) 访问静态成员变量、函数

于 2013-10-30T05:29:30.913 回答