2016-02-26 87 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

相關問題