2016-02-26 21 views
5

Oto dokumentacja z static kluczowego php.net:Dlaczego właściwości statyczne nie są dostępne przez "->", ale są dostępne przez "::"?

Właściwość zadeklarowana jako statyczne nie mogą być dostępne z instancji klasy obiektu (choć metoda statyczna może).

Dlaczego poniższy kod działa?

Oto ich przykładowy kod (ja skrócić):

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

Dlaczego $foo::$my_static still tu pracuje? Dziękuję wszystkim!

+0

Czy włączono opcję "error_reporting()"? Czy otrzymałeś ostrzeżenia lub powiadomienia? Strona internetowa zwraca uwagę na następujące kwestie: 'Uwaga: W PHP 5, wywołanie metod statycznych generuje ostrzeżenie o poziomie E_STRICT.". To może być powiązane. Jakiej wersji PHP używasz? –

+0

Nie ma tego przykładu dosłownie z podręcznika PHP. Po prostu trochę to skróciłem. Bez ostrzeżenia lub powiadomienia na pewno. I używam 5.5 –

+0

Spróbuj użyć $ foo-> my_static lub wykonaj funkcję wewnątrz klasy foo, która używa $ this-> my_static, a zobaczysz ostrzeżenie. Nie można jej użyć wewnątrz instancjonowanego obiektu klasy. – kainaw

Odpowiedz

1

:: (T_PAAMAYIM_NEKUDOTAYIM) nazywa się zakres rozdzielczości operatora do celu. Rozwiązuje on dostęp do statycznej właściwości obiektu.

+0

Rozumiem, co mówisz, ale dokument powiedział: "Właściwość zadeklarowana jako statyczna nie może być dostępna z instancjonowanym obiektem klasy" i $ foo trzymaj obiekt. Więc to jest moja troska. Czy możesz mieć jaśniejsze wyjaśnienie? –

+0

@Best_Name Dokumentacja jest nieprawidłowa (nieaktualna). Aby to osiągnąć, zastosowano RFC: https://wiki.php.net/rfc/uniform_variable_syntax#newly_added_and_generalized_syntax – Kubo2

Powiązane problemy