ТОП-10 популярных



Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...

НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...

БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...

Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...

ПОД ЛИТЕРОЙ «N»
Aтаку LCD-мониторов не остановить, а масштабы этого наступления даже немного пугают. Судите сами — многие пользователи только начинают приглядываться к новому для...


Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...

Размер объему не помеха.
С тех пор как компания Fujitsu отказалась от производства жестких дисков для настольных компьютеров, многие пользователи начали забывать о том,...


Какую только информацию мы не помещаем на компакт-диски: резервные копии важных данных, музыку, фильмы... Многие полагают, что главное - «купить...

PHP. Данные. Часть Шестнадцатая.


05-01-2015

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"));
?>

Понравился материал? Поделитесь с друзьями!



<< Предыдущая статьяСледующая статья >>
PHP. Данные. Часть Пятнадцатая. PHP. Данные. Часть Семнадцатая.