Насколько я понимаю соответствующие документы, [1] они оба делают одно и то же, create_function () просто предлагает вам уникальное имя функции.
Чтобы ответить на некоторые другие комментарии по этому вопросу:
create_function может быть назначена переменной, делая функцию доступной для других частей вашего кода, тогда как eval полезна только для данной области.
Вполне возможно, что eval () выполняется в текущей области, но определения функций в любом случае сбрасываются в глобальное пространство имен. [2] Поэтому всякий раз, когда вы определяете функцию, она будет доступна везде в вашей программе.
Использование eval () загромождает глобальный список функций, create_function () не будет
create_function () возвращает только строку с именем новой функции, [3] не какой-то специальный тип обратного вызова. Таким образом, оба метода будут загрязнять ваше глобальное пространство имен.
Так что нет, кроме того, что create_function () проще, он не выглядит лучше, чем eval ().
Сноска:
[1] http://au2.php.net/manual/en/functions.user-defined.php; http://au.php.net/create_function; http://au.php.net/eval
[2] http://au2.php.net/manual/en/functions.user-defined.php
[3] http://au.php.net/create_function