gpt4 book ai didi

php - 无法使用可变变量在 PHP 5.5 中执行函数

转载 作者:搜寻专家 更新时间:2023-10-31 21:08:09 24 4
gpt4 key购买 nike

我自己和另一个开发人员都在两个独立的系统(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,否则会因上述错误而死。

最佳答案

尝试进行字符串连接并分步调用

        $f = 'hook_' . __FUNCTION__;
print('testing function ' . $f);

if (method_exists($this, $f)) {
$this->$f();
}
$this->response->setOutput($this->render());

关于php - 无法使用可变变量在 PHP 5.5 中执行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28768480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com