gpt4 book ai didi

PHP7 method_exists 未捕获错误 : Function name must be a string

转载 作者:IT王子 更新时间:2023-10-29 00:17:07 27 4
gpt4 key购买 nike

我收到这个错误:

Fatal error: Uncaught Error: Function name must be a string in

对于这段代码:

if (function_exists($item['function'])) {
$item['function']($item, $default);
} elseif (method_exists($this, $item['function'])) {
$this->$item['function']($item, $default);
}

我知道将代码更改为

if (function_exists($item['function'])) {
$item['function']($item, $default);
} elseif (method_exists($this,$item['function'])) {
$this->{$item['function']}($item, $default);
}

解决了那个错误,但我的问题是,这一行应该

 $item['function']($item, $default);

也可以转换为

{$item['function']}($item, $default);

还是可以保持原样?

最佳答案

这是由于 incompatible changes在处理间接变量和方法的评估顺序中:

Changes to the handling of indirect variables, properties, and methods

Indirect access to variables, properties, and methods will now be evaluated strictly in left-to-right order, as opposed to the previous mix of special cases. The table below shows how the order of evaluaiton has changed.

不,您不必更改此行:

$item['function']($item, $default);

因为这里没有进行特殊的计算,所以它只会使用数组元素作为函数名并调用函数。您可以更改它,代码仍然可以正常工作,但这不是必需的。

但是由于您已经正确地完成了操作,因此您必须更改:

$this->$item['function']($item, $default);

到:

$this->{$item['function']}($item, $default);       ↑                 ↑

因为你可以在这个 table 中看到:

                    Old and new evaluation of indirect expressions      Expression            PHP 5 interpretation         PHP 7 interpretation-------------------------------------------------------------------------------  $$foo['bar']['baz'] |     ${$foo['bar']['baz']}  |    ($$foo)['bar']['baz']  $foo->$bar['baz']   |     $foo->{$bar['baz']}    |    ($foo->$bar)['baz']  $foo->$bar['baz']() |     $foo->{$bar['baz']}()  |    ($foo->$bar)['baz']()  Foo::$bar['baz']()  |     Foo::{$bar['baz']}()   |    (Foo::$bar)['baz']()

PHP 7 会假定您首先想要访问一个对象属性,然后您想要从该属性访问一个索引,并使用它的值作为方法名来调用一个方法(从左到右的顺序)。

要使用变量和索引作为属性名称,您必须使用大括号来表示。

关于PHP7 method_exists 未捕获错误 : Function name must be a string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34506185/

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