11.4. Пользовательские функции
Эти функции поддерживают создание и использование пользовательских функций. value call_user_func(string function, ...)
Функция call_user_func (листинг 11.78) используется для выполнения функции, определенной пользователем. Имя функции задается аргументом function, за которым следуют передаваемые функции аргументы. Это позволяет определить функцию, которая будет вызываться при выполнении.
Этой функцией можно воспользоваться, если необходимо вызвать метод или объект. Для этого следует передать в качестве имени функции массив. Первым элементом массива должно быть имя класса или объекта, вторым элементом - имя метода.
value call_user_func_array(string function, array parameters)
Эта функция аналогична функции call_user_func, за исключением того, что она принимает параметры в виде массива.
string create_function(string arguments, string code)
Функция create_function создает функцию и возвращает уникальное имя. Такие функции называются анонимными. Это позволяет создавать функции, зависящие от информации, которая становится известной при выполнении. Хотя имя этой новой функции можно сохранить в переменной и вызвать ее позднее, функция create_function, вероятнее, более полезная для создания простейших функций обратного вызова лямбда-стиля. В листинге 11.79 эта идея демонстрируется на практике.
eval(string phpcode)
Функция eval (листинг 11.80) делает попытку выполнить строку, указанную в аргументе phpcode, как строку PHP-сценария. Как и при любой другой работе со строками, двойные кавычки приведут к проверке на вложенные строки и другие специальные символы. Поэтому можно прибегнуть к использованию одинарных кавычек или символов доллара с обратной косой чертой.
Листинг 11.79. Функция create_function
<?php
$data = array('carrot', 'apple', 'banana');
//добавить символ подчеркивания к метке конца и перевести все буквы в верхний регистр
array_walk($data, create_function('&$v',
'$v = "_" . strtoupper($v) . "_";'));
print_r($data);
?>
В некоторых аспектах функция eval аналогична функции include или require. Но, кроме очевидных различий, eval работает со строками вместо файлов и сразу же начинает работать в режиме обработки PHP-кода. Если необходимо перейти в режим передачи простого HTML-кода, браузеру потребуется вставить закрывающий PHP-тег (?>). Почему может потребоваться выполнение функции eval в строке, которая содержит чистый HTML-код? Вероятнее всего, это может случиться при хранении кода в базе данных.
Будьте очень внимательны, работая с функцией eval и любой строкой, содержащей данные, получаемые с помощью переменных. Это также справедливо и для полей баз данных, которые обычно вводятся с помощью форм. По возможности вместо функции используйте вложенные операторы $.
| Листинг 11.80. Функция eval_
<?php
//Моделирование использования функции eval // с данными из базы данных
$code_from_database = '<b><?php print(date("Y-m-d")); ?></b>'; eval("?>" . $code_from_database);
?>
value func_get_arg(integer argument)
Функция func_get_arg (листинг 11.81) позволяет получить количество переданных пользовательской функцией аргументов. Первый аргумент имеет нулевой номер. Это позволяет создавать функции, которые могут принимать любое количество аргументов. Возвращаемое значение может иметь любой тип, соответствующий типу выбираемого аргумента. Функция func_num_args возвращает количество имеющихся аргументов.
В главе 4, "Функции", обсуждаются функции, включая функции, принимающие неограниченное количество аргументов.
Листинг 11.81. Функция func_get_arg
<?php
/*
** Функция concat
** Ввод: любое количество строк
** Вывод: строка
** Описание: вводимые строки располагаются вместе ** по порядку и возвращаются одной строкой.
*/
func_get_arg and func_num_args. function concat()
{
//начать с пустой строки
$data = "";
//просмотреть все аргументы for($i=0; $i < func_num_args();
{
// добавить возвращаемому значению текущий аргумент $data .= func_get_arg($i);
}
return($data);
}
// распечатать "OneTwoThree" print(concat("One", "Two", "Three"));
?>
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
PHP. Данные. Часть Шестнадцатая.
05-01-2015
<< Предыдущая статья | Следующая статья >> |
PHP. Данные. Часть Пятнадцатая. | PHP. Данные. Часть Семнадцатая. |