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] => мало
)