Как исправить create_function на php 8?

Ссылка скопирована
PHP
12 января 2026 1 ответ

На сайте был установлен модуль и при обновлении сайта до 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
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Виктор Sys Ответ

    Для исправления использования функции 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. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно