2016-02-26 15 views
5

İşte static anahtar kelime php.net gelen belgeler var: Statik olarak ilanStatik özelliklere "->" erişilemeyen, ancak "::" tarafından erişilebilen neden?

Bir özellik örneklenmiş sınıf nesnesi (statik yöntem olabilir gerçi) ile erişilemez.

Peki neden aşağıdaki kod çalışır?

İşte onların örnek kodu (ben o kısaltmak ettik) var: Burada

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

Neden $foo::$my_static still çalışır? Herkese teşekkürler!

+0

'error_reporting()' nız var mı? Herhangi bir uyarı veya uyarı aldınız mı? Web sayfası aşağıdakileri not eder: 'Dikkat: PHP 5'de, statik olmayan yöntemlerin çağrılması statik olarak bir E_STRICT düzeyi uyarısı üretir. İlişkili olabilir. Hangi PHP sürümünü kullanıyorsunuz? –

+0

Bu örnek PHP el kitabından tam anlamıyla yok. Biraz kısaldım. Kesin uyarı veya bildirim yok. Ve ben 5.5 –

+0

kullanın $ foo-> my_static kullanmayı deneyin veya $ this-> my_static kullanan foo sınıfının içinde bir işlev yapın ve uyarıyı göreceksiniz. Bunu, örneklenmiş sınıf nesnesinde kullanamazsınız. – kainaw

cevap

1

bir :: (T_PAAMAYIM_NEKUDOTAYIM) bir amaç için kapsamı çözünürlük operatör olarak adlandırılır. Nesnede bir statik özelliğe erişimi çözer.

+0

Ne dediğinizi anlıyorum, ancak belgede "Statik olarak bildirilen bir özellik, bir sınıf nesnesine erişilemiyor" ve $ foo bir nesneyi tutuyor. Yani bu benim endişem. Daha açık bir açıklamanın var mı? –

+0

@Best_Name Belgeler yanlış (güncel değil). Bunu başarmak için bir RFC vardı: https://wiki.php.net/rfc/uniform_variable_syntax#newly_added_and_generalized_syntax – Kubo2

İlgili konular