Патч для create_function () вызывает проблемы в PHP 7.3.6 - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь заменить устаревшую «create_function» в CMS. Я уже нашел много ответов на этот топи c. Тем не менее, патч, который я использовал, привел к еще большему затруднению, и я не очень уверен в работе над этим уровнем функций 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");
});

Однако тогда - вместо просто " сообщение «устарело» - я получаю

Исправимая фатальная ошибка: объект класса Closure не может быть преобразован в строку в [имя файла] в строке 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, я также получу:

Предупреждение: call_user_fun c () ожидает, что параметр 1 будет действительным обратным вызовом, функция '' не найдена или недопустимое имя функции в [то же имя файла] в строке 163

строка 163:

return call_user_func($func, $params);

var_dump ($ fun c) дает:

string(0) "" 

Кто-нибудь знает, что это такое и как его можно решить?

1 Ответ

0 голосов
/ 21 февраля 2020

create_function возвращает строку с именем «анонимной» функции, а не анонимной функции. Если вы хотите избежать изменения метода setColumnFormat(), вам нужно создать именованную функцию, а не анонимную функцию, и передать это имя в виде строки, которую setColumnFormat() может использовать в call_user_func().

* 1008. *
...