Как исправить create_function на php 8?
На сайте был установлен модуль и при обновлении сайта до php 8.0 он перестал работать
Проблема из-за удаленной функции в версии php 8.0 create_function
Есть вот такая строка с этой функцией:
array_walk_recursive($arConfig, create_function('&$n, $k', 'if($n=="true"){$n=true;}elseif($n=="false"){$n=false;}')); |
array_walk_recursive($arConfig, create_function('&$n, $k', 'if($n=="true"){$n=true;}elseif($n=="false"){$n=false;}'));
Как ее можно переписать под реалии php 8 ?
Дополнительно:
а что за ошибка то?
[Error]
Call to undefined function create_function() (0)
Заменяешь create_function('first', 'second') на function(first) { second } - можно даже регуляркой попробовать...
Ответы:
array_walk_recursive( $arConfig, static function (&$n) { $n = match($n) { "true" => true, "false" => false, default => $n, }; }, ); |
array_walk_recursive( $arConfig, static function (&$n) { $n = match($n) { "true" => true, "false" => false, default => $n, }; }, );
Нашел в этом файле еще 2 таких функций
$arStoreKeys = array_unique(array_map(create_function('$n', 'return preg_replace("/^find_el_catalog_store(d+)_.*$/", "$1", $n);'), $arStoreKeys)); $arPriceKeys = array_unique(array_map(create_function('$n', 'return preg_replace("/^find_el_catalog_price_(d+)$/", "$1", $n);'), $arPriceKeys)); |
$arStoreKeys = array_unique(array_map(create_function('$n', 'return preg_replace("/^find_el_catalog_store(d+)_.*$/", "$1", $n);'), $arStoreKeys)); $arPriceKeys = array_unique(array_map(create_function('$n', 'return preg_replace("/^find_el_catalog_price_(d+)$/", "$1", $n);'), $arPriceKeys));
- Мало знаком с php, пожалуйста подскажите, как быть с ними
- by_steris, выше же напсиали. замените create_function на static function
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для исправления использования функции create_function в PHP 8, необходимо заменить ее на анонимную функцию (лямбда-выражение). Функция create_function была устаревшей и была удалена в PHP 7.2, поэтому в PHP 8 ее использование приведет к ошибке.
Пример замены create_function на анонимную функцию:
```php
$func = create_function('$a, $b', 'return $a + $b;');
echo $func(2, 3);
```
Заменяем на:
```php
$func = function($a, $b) {
return $a + $b;
};
echo $func(2, 3);
```
Теперь анонимная функция будет работать в PHP 8 без ошибок. Помимо этого, использование анонимных функций более удобно и читаемо, чем create_function.
Надеюсь, это поможет вам исправить проблему с функцией create_function в PHP 8. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать.