最近,我看到了很多关于PHP缺乏后期静态绑定的讨论,直到5.3。
据我所知,在语言具备此特性之前,不可能实现像ActiveRecord这样的东西。
所以,我很好奇:
发布于 2008-12-15 05:43:16
如果您想要做一些工作,当然这有点费时,但是当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);当移到php5.3时,可以很容易地去掉多余的代码。
发布于 2008-12-16 12:54:02
“后期静态绑定”的概念是修补PHP静态声明类这一事实的一个黑客。大多数动态语言都有对象系统,其中类是对象。另一方面,PHP使代码和运行时完全分离(如C/C++)。这有各种各样的奇怪的含义,我们会更好地没有。
发布于 2009-04-18 05:28:40
如果没有后期的静态绑定,PHP解释器就会将函数hello()绑定到类A,而程序员在B类上清楚地表示函数时,缺少后期静态绑定将导致打印"hello“,而不是”拜“,尽管在类B上调用了hello()。
https://stackoverflow.com/questions/367400
复制相似问题