create_function

(PHP 4 >= 4.0.1, PHP 5, PHP 7)

create_function — Створює функцію динамічно, оцінюючи рядок коду

Увага

Ця функція оголошена застарілої починаючи з PHP 7.2.0 і була ВИДАЛЕНО у версії PHP 8.0.0. Використовувати цю функцію не рекомендується.

Опис

create_function(string $args, string $code): string

Створює функцію динамічно з переданих параметрів та повертає її унікальне ім'я.

Застереження

Функція всередині себе робить виклик функції eval(), а значить має такі ж проблеми з безпекою, як і eval(). Також у неї погані характеристики продуктивності та використання пам'яті, оскільки створені функції є глобальними і не можуть бути звільнені.

Используйтеанонімні функції

Список параметрів

Зазвичай рекомендується передавати параметри у вигляді рядків з одинарною лапкоюПри использовании строкз подвійною лапкою імена змінних у коді повинні бути ретельно екрановані, наприклад, ось так: \$somevar

args

Аргументи функції у вигляді рядка, розділеного комами.

code

Код функції.

Значення, що повертаються

Повертає унікальне ім'я функції у вигляді рядка або false у разі виникнення помилки. Зверніть увагу, що ім'я містить недрукований символ ("\0"), тому слід бути обережним під час друку імені або включення його в будь-який інший рядок.

Приклади

Приклад #1 Створення функції динамічно за допомогою create_function() або анонімних функцій

Ви можете використовувати динамічно створену функцію, щоб створити функцію на основі інформації, зібраної під час виконання. По-перше, використовуючи функцію create_function() :

Loading...

Тепер той же код, використовуючи анонімну функцію; Зверніть увагу, що код та аргументи більше не містяться в рядках:

Loading...

Результат виконання наведеного прикладу:

ln(2) + ln(2.718281828459) = 1.6931471805599

Приклад #2 Создание общей функции-обработчика с помощьюcreate_function()** або анонімних функцій**

Іншим варіантом використання може бути загальна функція-обробник, яка може застосовувати набір операцій до списку параметрів:

Loading...

І знову, той же код з використанням анонімних функцій. Зверніть увагу, що імена змінних у коді більше не потрібно екранувати, оскільки вони не укладені в рядок.

Loading...

Результат виконання наведеного прикладу:

Использование первого массива динамических функций
Параметры: 2.3445, M_PI
тригонометрия: -1.6291725057799
гипотенуза: 3.9199852871011
b*a^2 = 4.8103313314525
min(b^2+a, a^2,b) = 8.6382729035898
ln(a)/b = 0.27122299212594

Использование второго массива динамических функций
** "Варан ползёт" и "Варкалось. Хливкие шорьки пырялись по наве"
** для меня одинаковы! (смотря по первым 3 символам)
CRCs: 2672527412, 2269828269
similar(a,b) = 16(31.683168316832%)

Приклад #3 Використання динамічних функцій як callback-функцій

Можливо, найпоширенішим використанням динамічних функцій є передача їх як callback-функцій, наприклад, при використанні array_walk() або usort()

Loading...

Перетворення наведеного вище коду в анонімну функцію :

Loading...

Результат виконання наведеного прикладу:

Array
(
  [0] => о, манго
  [1] => эх, манго
  [2] => то манго
  [3] => это манго
)

Сортування рядків від найдовшого до найкоротшого за допомогою create_function() :

Loading...

Перетворення наведеного вище коду в анонімну функцію :

Loading...

Результат виконання наведеного прикладу:

Оригинальный массив:
Array
(
    [0] => мало
    [1] => много
    [2] => большая строка
    [3] => строка строка строка
)
Отсортированный:
Array
(
    [0] => строка строка строка
    [1] => большая строка
    [2] => много
    [3] => мало
)

Дивіться також