Bir self
sınıf üyesine başvurmak için kullandığınızda, anahtar kelimeyi içinde kullandığınız sınıfa atıfta bulunuyorsunuz. Bu durumda, Foo
sınıfınız adı verilen korumalı bir statik özelliği tanımlar $bar
. Eğer kullandığınız zaman self
içinde Foo
özelliği başvurmak sınıfta, aynı sınıf durumdayız.
Bu nedenle self::$bar
, Foo
sınıfınızda başka bir yerde kullanmayı denediyseniz, ancak Bar
mülk için farklı bir değere sahip bir sınıfınız varsa , bunun Foo::$bar
yerine onu kullanırdı Bar::$bar
, ki bu sizin niyet ettiğiniz şey olmayabilir:
class Foo
{
protected static $bar = 1234;
}
class Bar extends Foo
{
protected static $bar = 4321;
}
Ne zaman çağrı yoluyla bir yöntem static
, sen adlandırılan bir özellik yürütmesini ediyoruz geç statik bağlamaları (PHP 5.3 tanıtıldı).
Yukarıdaki senaryoda, kullanmak (1234) ile self
sonuçlanacaktır Foo::$bar
. Ve kullanmak (4321) ile static
sonuçlanacaktır Bar::$bar
çünkü ile static
yorumlayıcı, Bar
çalışma zamanı sırasında sınıf içindeki yeniden bildirimi hesaba katar .
Alt sınıflarda özellikleri genellikle yeniden bildirmediğiniz için genellikle yöntemler için veya hatta sınıfın kendisi için özellikler yerine geç statik bağlamaları kullanırsınız; static
Geç bağlanmış bir kurucuyu çağırmak için anahtar sözcüğün kullanımına bir örnek şu ilgili soruda bulunabilir: Yeni benlik ve yeni statik
Bununla birlikte, bu static
özelliklerle birlikte kullanılmasını da engellemez .