Информационные технологииStfw.Ru 🔍

Пользовательские функции

Синтаксис языка и операторы
🕛 01.11.2006, 12:59
Пользовательские функции могут быть определены следующим образом:
function foo ($arg_l. $arg_2..$arg_n) {
echo "Example function.\n":
return Sretval. // значение,
возвращаемое функцией }

Внутри тела функции может присутствовать любой PHP-код и даже определение других функций или классов. В РНР 3 определение функции должно предшествовать первому ее использованию, в РНР 4 это требование отсутствует.

РНР не допускает перегрузку функций (в отличие от C++), то есть если функция однажды определена, ее код нельзя изменить или удалить. Поэтому вторичное (пере)определение функции вызовет

ошибку.

РНР 4 также поддерживает неопределенное число аргументов функции и значение аргументов по умолчанию (см. дальше). Для использования этих возможностей полезны функции:
func_num_args(), func_ get_arg() и func_get_args().

Если вы помните, функциям недоступны глобальные переменные.

Передача функциям аргументов

Информация передается функциям через набор их аргументов, представленных последовательностью значений (переменных, выражений), разделенных запятыми. РНР поддерживает: передачу значений аргументов «по значению» (по умолчанию) и передачу значений по ссылке; значения аргументов по умолчанию и переменное для функции число аргументов. См. также:
func_num_args(), func_get_arg() и func_get_args().
function takes_arra.y($'input) { // в функцию передается массив
echo "$input[0] + $input[l] = ". $input[0]+$input[l]: }

Передача значений аргументов по ссылке

По умолчанию в функцию передаются значения аргументов, то есть копии значений выражений и переменных, поэтому изменение значений аргументов имеет смысл только внутри функций и не отражается вовне. Если необходимо изменять сами аргументы, тогда их необходимо передавать по ссылке, так как тогда в функцию передаются не значения, а ссылки переменных. Для этого перед переменной в объявлении функции ставится знак амперсант (&), тогда аргумент всегда будет передаваться в функцию по ссылке:
function add_some_extraWstnng. $x) { Istnng .= "дополним строку \п"; $х += 3. // бессмысленно, т.к.
//значение $х потеряется при завершении
функции }
$str = 'Есть строка - '; $а = 1;
add_some_extra($str. $а):
echo $str; // напечатает
'Есть строка - дополним строку'
echo $a. // значение $а не изменилось
Если вы хотите передать аргумент по ссылке в функцию, которая по умолчанию принимает значения «по значению», то амперсант ставится перед переменной в строке вызова функции:

function foo ($bar) { // функция принимает аргумент
«по значению» $bаг = ' и что-то еще';
} $str = 'Это строка. ':
foo ($str); // передача аргумента
по значению echo Sstr . "\n"; // выведет 'Это строка. '
foo (&$str), // передача аргумента по ссылке
echo $str; // выведет ' Это строка, и что-то еще'

Значения аргументов по умолчанию

В определении функции можно использовать синтаксис C++ для задания значений аргументов по умолчанию:
function fee ($type = "Яблоко") {
return "Имеем фрукт: $type.\n";
}
echo fee О:
// выводит «Инеем фрукт: Яблоко» echo fee ("Груша"); // выводит «Имеем фрукт Груша»
Значение по умолчанию должно быть константным.
Отметим, что аргументы, имеющие значения но умолчанию, должны стоять (в объявлении функций) после аргументов, их не имеющих.
function mm (Staste = "вкусный". $ fruit)
{ return "Имеем Staste фрукт $ fruit\n"; } echo mm ("Яблоко") // Ошибка смысла!

PHP выдаст следующее:
Warning: Missing argument 2 in call to
ram () in Предупреждение: Не указан 2-й аргумент
в вызове mmm ()
/usr/local/etc/httpd/htdocs/php3test/functest.htrnl
on' line 41 Имеем Яблоко фрукт:

Интерпретатор пытается присвоить первое значение (из аргументов функции) первому аргументу, а так как для второго аргумента значение не задано (ни по умолчанию, ни явно), ю это вызывает ошибку (хотя и не препятствует дальнейшему выполнению сценария). Сравните со следующим примером:
function mmm2000 (Sfruit. $taste = "вкусный") { return "Имеем Staste фрукг: $ fruit\n".
} echo mwn2000 ("Яблоко"); // работает как надо!
echo mim2000 ("Яблоко", "кислый");
// явное указание аргумента

РНР выдаст следующее:
Имеем вкусный фрукт: Яблоко
Имеем кислый фрукт:
Яблоко

Неопределенное число аргументов в функции

РНР 4 поддерживает неопределенное число аргументов в функциях пользователя. Для использования этого имеются функции func_num_ args(), func_get_arg() и func get_args(). При этом не требуется использовать специальный синтаксис и список аргументов может указываться, как в обычных функциях.

Возвращение функциями значений

Значения возвращаются функциями с помощью команды return. Возвращаться может любой тип, включая массивы и объекты.
Пользовательские функции 71
function square ($num)
{ return $num * $num:
} echo square (4); // outputs '16'.

Из функции нельзя возвратить несколько значений одновременно, и если такая необходимость возникает, следует использовать массив.
function snalljiumbers() {
return array (0. 1. 2);
} list ($zero. $one. $two) = smalljiumbers(),
echo "Szero. $one, $two";

Чтобы вернуть из функции ссылку, нужно использовать оператор ссылки (&) перед именем функции при ее объявлении и при присваивании ее значения переменной.
function &returns_reference()
{ return $someref; }
Snewref =&returns_reference();

Помимо возвращения значений команда return выполняет еще одну важную роль. Она прерывает выполнение функции подобно команде break в условных структурах и циклах. Если необходимо просто прервать выполнение функции, не возвращая никакого значения, в*команде return аргумент можно не использовать.
function а О {
echo "Эта строка будет выведена":
return:
echo "Сюда мы не доберемся";
} а О;

Переменные-функции

РНР поддерживает концепцию переменных-функций. Это означает, что если после имени переменной указаны круглые скобки, РНР будет искать функцию с именем, содержащимся в переменной, и при нахождении таковой запустит ее. Эту полезную особенность можно использовать для осуществления обратных вызовов, составления списков функций и многими другими способами.
<?рпр
function foot) {
echo "Функция foo()<br>\n",
} function barf $arg = '' )
{ echo "Функция bагО;
с аргументом '$arg' ,<br>\n" }
Sfunc = 'too'.
$func(): // запустит функцию foo():
Sfunc = 'bar'.
$func( 'test' );
// запустит функцию bar('test'):
?>

Учебник по основам PHP   Теги:

Читать IT-новости в Telegram

Читайте также:

Функции

Функции POSIX

Сетевые функции

Информационные технологии
Мы в соцсетях ✉