2016-02-26 15 views
5

Ecco la documentazione da static parola chiave PHP.net:Perché le proprietà statiche non sono accessibili da "->" ma accessibili da "::"?

una proprietà dichiarata come statica non è possibile accedere con un oggetto di classe istanziata (anche se un metodo statico può).

Quindi perché funziona il seguente codice?

Ecco il loro codice di esempio (ho accorciarla):

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

Perché $foo::$my_static still opere qui? Grazie a tutti!

+0

Hai attivato 'error_reporting()'? Hai ricevuto avvisi o notifiche? La pagina web annota quanto segue: 'Attenzione: In PHP 5, la chiamata di metodi non statici genera staticamente un avviso di livello E_STRICT. Potrebbe essere correlato. Quale versione di PHP stai usando? –

+0

Nessun esempio è letteralmente dal manuale PHP. L'ho appena accorciato un po '. Nessun avviso o avviso di sicuro. E io uso il 5.5 –

+0

Prova ad usare $ foo-> my_static o fai una funzione all'interno della classe foo che usa $ this-> my_static e vedrai l'avviso. Non è possibile utilizzarlo all'interno dell'oggetto della classe istanziata. – kainaw

risposta

1

A :: (T_PAAMAYIM_NEKUDOTAYIM) è chiamato operatore di risoluzione dell'ambito per uno scopo. Risolve l'accesso a una proprietà statica sull'oggetto.

+0

Capisco cosa dici, ma il documento diceva "Una proprietà dichiarata come statica non può essere acceduta con un oggetto di classe istanziato" e $ foo tiene un oggetto. Quindi questa è la mia preoccupazione. Puoi avere una spiegazione più chiara? –

+0

@Best_Name La documentazione è errata (non aggiornata). C'era un RFC per raggiungere questo: https://wiki.php.net/rfc/uniform_variable_syntax#newly_added_and_generalized_syntax – Kubo2

Problemi correlati