我定义了以下类(此处提供了代码段)...
class JEH_User
{
// <snip>
protected function __construct(&$propertyHash)
{
$this->usrVals = $propertyHash;
// <snip>
}
// <snip>
static public function FindAll()
{
$retAry = Array();
$db = JEH_DBase::GetDBase();
$db->LockTables( Array( '__JEH_USER' => JEH_DBase::LOCK4READ) );
$db->Execute(
"SELECT * from __JEH_USER;",
Array(),
function ($r) use (&$retAry) {
$retAry[] = new JEH_User($r);
return TRUE;
} );
$db->UnlockAllTables();
return $retAry;
}
// <snip>
}
我的问题是......最初(我承认并没有真正考虑它为什么应该或不应该工作)在FindAll()
我将闭包传回给 DBExecute()
函数的函数中。这个函数所做的只是做一些完整性检查,然后执行 SQL,然后为返回的每一行调用该行的闭包/回调。
问题是在 PHP 5.4(.14) 中这是可行的。闭包似乎绑定到创建它的类上下文,因此可以调用protected __construct()
构造函数。在我的提供程序运行的 5.3(.23) 中,情况并非如此,它抱怨说
Fatal error: Call to protected JEH_User::__construct() from invalid context in ... <snip>
所以,我的问题是,我可以在 PHP 5.3 中克服这个问题,而不需要对我的代码库进行太多修改吗?在这种情况下,我有一点谷歌来尝试找出 .3 和 .4 之间的区别。我见过这个Closure::bind()
功能,但这是 5.4 ......
此外,手册说
5.4.0 $this can be used in anonymous functions.
5.3.0 Anonymous functions become available.
哦亲爱的!有谁知道任何“快速”修复或者这是对 PHP 5.3 工作的重写?
提前致谢!