Tam olarak ne geç-statik PHP bağlayıcıdır?
PHP 5.3.0 ve PHP statik miras bağlamında denilen sınıf başvurmak için kullanılır geç statik bağlama adı verilen bir özelliği uygular.
Başlangıçta zamanında denirdi sınıfına başvuran bir anahtar kelime getirerek bu sınırlama çözmeye Geç statik bağlayıcı çalışır. Bu yeni bir anahtar kelime tanıtmak değil, kullanmak static
zaten ayrıldı karar verildi.
İbret Görelim:
<?php
class Car
{
public static function run()
{
return static::getName();
}
private static function getName()
{
return 'Car';
}
}
class Toyota extends Car
{
public static function getName()
{
return 'Toyota';
}
}
echo Car::run(); // output: Car
echo Toyota::run(); // output: Toyota.
?>
late static bindings
son "non-yönlendirme çağrısı" adlı sınıfını saklayarak çalışır. Statik yöntem çağrıları durumunda, bu açıkça (:: operatörünün solunda genellikle bir) adlı sınıfıdır; non statik yöntem çağrıları durumunda, bu nesne sınıfıdır.
Bir "yönlendirme çağrı" self::
, parent::
, static::
, ya da, sınıf hiyerarşisinde yukarı gidiş, {[(tarafından tanıtıldı statik biridir 3)]}.
Fonksiyonu get_called_class()
denilen sınıfın adı ve static::
kapsamını tanıttı bir dize almak için kullanılabilir.
Kesinlikle PHP kılavuzda Late Static Bindings okumak gerekir. Ancak, hızlı bir özetini vermeye çalışacağım.
Temelde, self
anahtar kelime miras kuralları takip etmez aslında aşağı kaynar. self
her zaman kullanıldığı sınıfa giderir. Bu bir üst sınıfta bir yöntem yapmak ve bir çocuk sınıf onu ararsanız size beklediğiniz gibi, self
çocuğu başvuru anlamına gelir.
Geç statik bağlayıcı özellikle bu eksikliğin giderir static
anahtar kelime için yeni bir kullanım sunuyor. Eğer kullandığınız zaman static
, ilk önce kullanmak sınıfını, yani temsil eder. Bu çalışma zamanı sınıf 'bağlar'.
Bunlar arkasında iki temel kavram vardır. Yol self
, parent
ve static
oyun olduğunda static
çalışabilir ince olabilir, bu yüzden ziyade, daha ayrıntılı için gitmek Ben kesinlikle el ile sayfa örneklerini incelemek tavsiye ederim. Her anahtar kelimenin temellerini anlamak sonra, örnekler almak için gidiyoruz ne sonuçlar tür görmek için oldukça gereklidir.
There is not very obvious behavior: Following code produces 'alphabeta'
class alpha {
function classname(){
return __CLASS__;
}
function selfname(){
return self::classname();
}
function staticname(){
return static::classname();
}
}
class beta extends alpha {
function classname(){
return __CLASS__;
}
}
$beta = new beta();
echo $beta->selfname();
echo $beta->staticname();
Biz beta sınıftan classname fonksiyonu bildirgesini kaldırmak Ancak, biz sonucu 'alphaalpha' alırsınız.
Bu bağlantı beni bağlayıcı geç statik kavramını temizlemek yardımcı.
http://www.lornajane.net/posts/2009/php-5-3-feature-late-static-binding