geç statik bağlama: yaygın web geliştirme desteği ne için kullanılır hangi diller?

4 Cevap php

Son zamanlarda 5.3 kadar bağlama geç statik PHP'nin eksikliği ile ilgili konuşmak bir sürü görmeye oldum.

Dil bu özelliğe sahip kadar ActiveRecord gibi şeyler doğru uygulamaları okudum mümkün değildir.

Yani, ben merak üzereyim:

  • Which languages do support it, specifically those commonly associated with web development such as Python, Ruby, Perl, Java, C#, (JavaScript?).
  • Which actually make use of it on a regular basis?

4 Cevap

Eğer etrafında bir iş istiyorsanız, bu kuşkusuz biraz zaman alıcı, henüz 5.3 mevcut ve kaynaştırma hale php zaman kolayca çıkarılabilir olacak, aşağıdaki kodu deneyebilirsiniz.

class Specific_Model extends Model{

    public static function GetAll($options = null){

        parent::GetAll($options, get_class());

    }

}


class Model{

    public static function GetAll($options = null, $class = null){

       if(is_null($class)) $class = get_class();  

       /* Do stuff here */

    }

}

Sonra aşağıdaki kodu kullanabilirsiniz ...

Specific_Model::GetAll($options);

5.3 php taşırken ve kolayca aşırı kodunu şerit.

"Bağlama Geç Statik" kavramı PHP statik sınıfları ilan etti gerçeğini yama kesmek. En dinamik diller bir sınıf bir nesne bir nesne sistemi var. Öte yandan, PHP, kod ve zamanını tamamen ayrıldı (gibi C / C + +) tutar. Bu, biz olmadan daha iyi olacağını, garip etkileri her türlü sahiptir.

Programcı açıkça B sınıfı üzerindeki fonksiyonu ifade edildiğinde geç statik bağlama olmadan, PHP yorumlayıcı bağlayıcı geç statik olmaması, basılacak "merhaba" neden "bye" merhaba rağmen ederim A sınıfı) (merhaba işlevini bağlar () B sınıfı çağrıldığını

Ben tamamen ne geç statik bağlayıcıdır yanlış. İşte Wikipedia diyor.

Late static binding is a variant of [name] binding somewhere between static and dynamic binding. Consider the following PHP example:

class A {
	static $word = "hello";
	static function hello() {print self::$word;}
}

class B extends A {
	static $word = "bye";
}

B::hello();

Without late static binding, the PHP interpreter binds the function hello() to class A when the programmer is clearly expressing the function on class B. The absence of late static binding would cause "hello" to be printed, not "bye" despite hello() being called on class B.

Late static binding in the interpreter means that $word is determined at runtime. In this case it would reference B::$word if B::hello() is called and A::$word if A::hello() is called. This does require a change in keywords from self to static (possibly available beginning with PHP 5.3) in A::hello()

class A {
	static $word = "Welcome";
	static function hello() {print static::$word;}
}

class B extends A {
	static $word = "bye";
}

B::hello();