后期静态绑定:常用于Web开发的语言是什么?

时间:2008-12-15 03:24:09

标签: php oop binding

最近我看到很多关于PHP缺乏后期静态绑定的讨论,直到5.3。

据我所知,在语言具有此功能之前,无法正确实现ActiveRecord等内容。

所以,我很好奇:

  • 支持哪种语言, 特别是那些 与web开发相关联 如Python,Ruby,Perl,Java,C#, (JavaScript的?)。
  • 实际上在它上面使用它 经常性的?

4 个答案:

答案 0 :(得分: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时,可以轻松删除多余的代码。

答案 1 :(得分:0)

“Late Static Binding”的概念是修补PHP静态声明类的事实。大多数动态语言都有一个对象系统,其中一个类是一个对象。另一方面,PHP保持代码和运行时完全分离(如C / C ++)。这有各种各样奇怪的含义,没有我们会更好。

答案 2 :(得分:-1)

没有后期静态绑定,当程序员在类B上清楚地表达函数时,PHP解释器将函数hello()绑定到类A.没有后期静态绑定会导致打印“hello”,而不是“再见” “尽管在B级调用了hello()。

答案 3 :(得分:-3)

我完全误解了后来的静态绑定是什么。这是Wikipedia所说的内容。

  

后期静态绑定是一种变体   [name]绑定静态和。之间的某处   动态绑定。考虑一下   以下PHP示例:

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

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

B::hello();
  

没有后期静态绑定,PHP   解释器绑定函数hello()   程序员的时候是A级   清楚地表达了这个功能   class B。没有迟到的静电   绑定会导致“你好”   打印,尽管hello()不是“再见”   在class B上被调用。

     

后期静止   解释器中的绑定意味着   $word在运行时确定。在   这种情况下会引用B::$word   如果调用B::hello()A::$word   如果调用A::hello()这样做   需要更改关键字   selfstatic(可能可用   从{5.3}开始,在A::hello()

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

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

B::hello();