create_function() 的补丁导致 PHP 7.3.6 出现问题
Patch for create_function() causes problems in PHP 7.3.6
我正在尝试替换 CMS 中已弃用的 "create_function"。我已经找到了很多关于这个话题的答案。但是,我使用的补丁导致了更多的麻烦,我对PHP这种级别的功能并不是很坚定。因此,如果有人能帮助我,我会很高兴。
我变了
$list->setColumnFormat('active', 'custom', create_function(
'$params',
'global $I18N;
$list = $params["list"];
return $list->getValue("active") == 1 ? $I18N->msg("yes") : $I18N->msg("no");'
));
到
$list->setColumnFormat('active', 'custom', function($params) {
global $I18N;
$list = $params["list"];
return $list->getValue("active") == 1 ? $I18N->msg("yes") : $I18N->msg("no");
});
然而 - 而不是只是一条 "deprecated" 消息 - 我得到
Recoverable fatal error: Object of class Closure could not be converted to string in [filename] on line 155
第 155 行是:
trigger_error('rexCallFunc: Using of an unexpected function var "'.$function.'"!');
var_dump($function) 给出:
object(Closure)#16 (1) { ["parameter"]=> array(1) { ["$params"]=> string(10) "" } }
如果我将第 155 行注释掉,我还会得到:
Warning: call_user_func() expects parameter 1 to be a valid callback, function '' not found or invalid function name in [the same filename] on line 163
第 163 行是:
return call_user_func($func, $params);
var_dump($func) 给出:
string(0) ""
有人知道这是怎么回事以及如何解决吗?
create_function
returns a string 带有 "anonymous" 函数的名称,而不是匿名函数。如果您想避免更改 setColumnFormat()
方法,您需要创建一个命名函数而不是匿名函数,并将该名称作为 setColumnFormat()
可以在 call_user_func()
中使用的字符串传递.
function patchFunction($params) {
global $I18N;
$list = $params["list"];
return $list->getValue("active") == 1 ? $I18N->msg("yes") : $I18N->msg("no");
}
$list->setColumnFormat('active', 'custom', 'patchFunction');
我正在尝试替换 CMS 中已弃用的 "create_function"。我已经找到了很多关于这个话题的答案。但是,我使用的补丁导致了更多的麻烦,我对PHP这种级别的功能并不是很坚定。因此,如果有人能帮助我,我会很高兴。
我变了
$list->setColumnFormat('active', 'custom', create_function(
'$params',
'global $I18N;
$list = $params["list"];
return $list->getValue("active") == 1 ? $I18N->msg("yes") : $I18N->msg("no");'
));
到
$list->setColumnFormat('active', 'custom', function($params) {
global $I18N;
$list = $params["list"];
return $list->getValue("active") == 1 ? $I18N->msg("yes") : $I18N->msg("no");
});
然而 - 而不是只是一条 "deprecated" 消息 - 我得到
Recoverable fatal error: Object of class Closure could not be converted to string in [filename] on line 155
第 155 行是:
trigger_error('rexCallFunc: Using of an unexpected function var "'.$function.'"!');
var_dump($function) 给出:
object(Closure)#16 (1) { ["parameter"]=> array(1) { ["$params"]=> string(10) "" } }
如果我将第 155 行注释掉,我还会得到:
Warning: call_user_func() expects parameter 1 to be a valid callback, function '' not found or invalid function name in [the same filename] on line 163
第 163 行是:
return call_user_func($func, $params);
var_dump($func) 给出:
string(0) ""
有人知道这是怎么回事以及如何解决吗?
create_function
returns a string 带有 "anonymous" 函数的名称,而不是匿名函数。如果您想避免更改 setColumnFormat()
方法,您需要创建一个命名函数而不是匿名函数,并将该名称作为 setColumnFormat()
可以在 call_user_func()
中使用的字符串传递.
function patchFunction($params) {
global $I18N;
$list = $params["list"];
return $list->getValue("active") == 1 ? $I18N->msg("yes") : $I18N->msg("no");
}
$list->setColumnFormat('active', 'custom', 'patchFunction');