我的自己和另一位开发人员都在两个独立的系统(Ubuntu和OSX)上安装了Lamp,由于一些奇怪的原因,我们内部开发的软件包不再适用于PHP 5.5(在我的情况下为5.5.9)
特别是一个领域是:
if (method_exists($this, 'hook_' . __FUNCTION__)) {
$this->{'hook_' . __FUNCTION__}();
}
上面的代码导致错误,指出名为hook_xxx
的方法不存在,但是如果我们用以下代码替换代码:
if (method_exists($this, 'hook_' . __FUNCTION__)) {
call_user_func(array($this, 'hook_' . __FUNCTION__));
}
效果很好。
更糟糕的是,这适用于PHP 5.4.33 ..
我刚刚花了2天时间与PHPBrew等人一起试图安装PHP 5.4.33并认为解决方案实际上是在试图找出它为什么会失败的原因。
有什么想法吗?
由于
加文
我得到的错误是:
Call to undefined method LocalController::hook_index()
我所拥有的地方:
<?php
class Controller
{
public function index() {
echo 'Parent index called';
if (method_exists($this, 'hook_' . __FUNCTION__)) {
$this->{'hook_' . __FUNCTION__}();
}
}
}
class LocalController extends Controller
{
public function hook_index() {
echo 'Child index called';
}
}
它自己将在Controller中加载的应用程序然后如果它存在,它将加载到LocalController中。
这一切在5.4上工作正常,或者如果我将其更改为使用call_user_func,否则会因上述错误而死亡。
答案 0 :(得分:2)
尝试进行字符串连接并在单独的步骤中调用
$f = 'hook_' . __FUNCTION__;
print('testing function ' . $f);
if (method_exists($this, $f)) {
$this->$f();
}
$this->response->setOutput($this->render());