2008-12-15 3 views
2

В последнее время я много говорил о нехватке поздней статической привязки PHP до 5.3.поздняя статическая привязка: какие языки обычно используются для веб-разработки?

Из того, что я читал, правильная реализация таких вещей, как ActiveRecord, невозможна до тех пор, пока язык не будет иметь эту функцию.

Итак, мне любопытно:

  • Какие языки поддерживают его, конкретно, обычно , связанные с веб-разработки, такие как Python, Ruby, Perl, Java, C#, (JavaScript?).
  • Что на самом деле использовать его на регулярной основе ?

ответ

-3

Я полностью не понял, что такое поздняя статическая привязка. Вот что говорит Wikipedia.

Позднее статическое связывание представляет собой вариант [название] связывание где-то между статическим и динамическим связывания. Рассмотрим следующий PHP, например:

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

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

B::hello(); 

Без позднего статического связывания, интерпретатор PHP связывает функция hello() к классу А, когда программист четко выражающая функцию class B. Отсутствие позднего статического связывания приведет к тому, что «привет» будет напечатан, а не «bye», несмотря на то, что hello() вызывается на class B.

Late static Взаимодействие в интерпретаторе означает, что $word определяется во время выполнения. В этот случай будет ссылаться на B::$word , если вызывается B::hello() и A::$word , если вызывается A::hello(). Это требует изменения ключевых слов из self в static (возможно, доступны начиная с PHP 5.3) в A::hello()

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

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

B::hello(); 
+0

Я боюсь, что DI не имеет ничего общего со статической привязкой ... – Guillaume 2008-12-16 13:19:11

4

Если вы хотите работать вокруг, что по общему признанию, является немного времени, но будет легко удаляться, когда php 5.3 становится доступным и включенным, вы можете попробовать следующий код.

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 */ 

    } 

} 

Затем вы можете использовать следующий код ...

Specific_Model::GetAll($options); 

И легко вырезать лишний код при переходе на PHP 5.3.

0

Концепция «Late Static Binding» - это взломать исправление того факта, что PHP статически объявляет классы. Большинство динамических языков имеют объектную систему, где класс является объектом.С другой стороны, PHP сохраняет код и время выполнения полностью разделенными (например, C/C++). У этого есть всевозможные странные последствия, что нам было бы лучше без.

-1

Без позднего статического связывания интерпретатор PHP связывает функцию hello() с классом A, когда программист четко выражает функцию класса B. Отсутствие позднего статического связывания приведет к печати «привет», bye ", несмотря на приветствие приветствия(), вызываемого классом B.

 Смежные вопросы

  • Нет связанных вопросов^_^