2016-02-26 86 views
5

下面是从static关键字PHP.net的文档:为什么静态属性不能通过“ - >”访问,但可以通过“::”访问?

声明为静态属性不能与实例化的类对象(尽管一个静态方法可以)进行访问。

那么,为什么下面的代码工作?

这里是他们的示例代码(我已经缩短):

<?php 
class Foo 
{ 
public static $my_static = 'foo'; 
} 
$foo= new Foo(); 
print $foo::$my_static; //print 'foo' 
?> 

为什么$foo::$my_static still的作品吗?谢谢大家!

+0

你有'error_reporting()'打开了吗?你有没有收到任何警告或通知?该网页确实注意到以下几点:'小心: 在PHP 5中,调用非静态方法会静态生成E_STRICT级别警告。这可能是相关的。你使用什么PHP版本? –

+0

没有这个例子是从PHP手册字面上。我只是缩短了一点点。当然没有警告或通知。我使用5.5 –

+0

尝试使用$ foo-> my_static或者在使用$ this-> my_static的foo类中创建一个函数,您将看到警告。你不能在实例化的类对象中使用它。 – kainaw

回答

1

A ::T_PAAMAYIM_NEKUDOTAYIM)被称为范围分辨率运算符用于某种目的。它解析了对该对象的静态属性的访问权限。

+0

我明白你说的是什么,但文档中提到“声明为静态的属性不能用实例化的类对象访问”,$ foo保存一个对象。所以这是我的担忧。你能有一个更清晰的解释吗? –

+0

@最佳名称文档错误(不是最新的)。有一个RFC来实现这一点:https://wiki.php.net/rfc/uniform_variable_syntax#newly_added_and_generalized_syntax – Kubo2

相关问题