Создание динамической функции на PHP


Одной из весьма интересных возможностей PHP является создание функций прямо при выполнении PHP-кода. Давайте разберём, как создаются динамические функции в PHP, на примерах.

Занимается этим функция create_function(), которая принимает параметры функции и её тело.

<?php
$sqr = create_function('$x', 'return $x * $x;');
echo $sqr(3); // Выведется 9
?>

Всё достаточно прозрачно, однако, обратите внимание, что и аргументы функции, и тело функции необходимо писать в одинарных кавычках. Либо если нужно подставлять в тело значения некоторых переменных, то использовать двойные, но экранировать там, где подстановка значения не нужна.

Применяется функция create_function() редко, единственное разумное применение, которое приходит на ум - это использование её при пользовательской сортировке:

<?php
$array = array("php", "functions", "create", "mysql"); // Создаём массив
usort($array, create_function('$x, $y', 'return strlen($x)-strlen($y);')); // Сортируем строки по длине
print_r($array); // Выводим массив
?>

Такая запись значительно короче, чем если бы мы отдельно создавали функцию сортировки. Однако, функция create_function() работает очень медленно. Если бы мы при сортировке создали отдельную функцию заранее, то данный скрипт работал бы в 2.5 раза быстрее. Поэтому если нет необходимости создавать динамические функции в PHP, то не делайте этого.