Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в СУБД HyTech.doc
Скачиваний:
11
Добавлен:
01.03.2025
Размер:
2.67 Mб
Скачать

Параметры пользовательских функций - переменное число параметров

Функцию можно вызвать с переменным числом параметров. Число аргументов и сами аргументы можно получить при помощи встроенных функций func_num_args, func_get_arg, func_get_args.

Пример:

<?php // пример функции без явно определенных параметров function args_example () {   $cnt = func_num_args();   // получили число аргументов   for( $i=0; $i < $cnt; $i++ )   {     $var1 = func_get_arg( $i );     // выводим значение i-го параметра     echo $var1;   }   // тоже самое только с помощью другой функции   $arr_args = func_get_args();     // получаем массив параметров   foreach( $arr_args as $par )   {     echo $par;   } } // выведем на экран 2 раза 2 параметра args_example ( "Иванов", "Петров" ); ?> 

Возвращаемое значение

Конструкция return в теле функции может отсутствовать. В этом случае функция возвращает NULL. Функция может возвращать значение любого типа, можно, например, вернуть массив. Нельзя возвращать ссылки на локальные переменные, определенные в теле функции.

Пример:

<?php function null_example ( $par1 ) {   if( $par1 == 1 )   {     return true;   } } $var1 = null_example ( 1 ); // $var1 содержит true $var1 = null_example ( 2 ); // $var1 содержит NULL // функция вернет массив function retarr_example () {   $arr = array( 0 => "Иванов", 1 => "Петров" );   return $arr; } $var_array = retarr_example (); // вернем массив // выведем значения элементов foreach ( $var_array as $v ) {   echo $v; } ?>

Локальные и глобальные переменные

В теле функции могут быть определены локальные переменные. Локальные переменные не доступны вне тела функции. В теле функции можно ссылаться на переменные, определенные вне функции (глобальные переменные). Для этого используется ключевое слово global.

Функция может вернуть ссылку на глобальную переменную. Для этого при определении функции перед ее именем следует указать знак амперсанда &. Также при каждом вызове такой функции перед ее именем следует писать амперсанд.

Пример:

<?php $var_1 = "Иванов"; function local_example () {   $var_1 = "Петров"; // это локальная переменная } local_example(); // после вызова $var_1 = "Иванов" function global_example () {   // делаем переменную $var_1   // определенную вне тела   // функции доступной для изменения   global $var_1;     $var_1 = "Петров"; } global_example(); // после вызова $var_1 = "Петров" $var_2 = "Сидоров"; function &ref_example () {   global $var_1, $var_2;     // возвращаем ссылку на переменную $var_2;   return $var_2; } $var_3 = &ref_example (); // $var_3 теперь ссылается на $var_2 $var_2 = "Иванов";        // $var_3 теперь содержит также строку "Иванов" ?> 

Статические переменные

Кроме глобальных переменных можно определить также статические переменные. Статические переменные видны только в теле функции, но они не теряют своих значений между вызовами функций. Для определения статических переменных используется ключевое слово static (см. пример). Статическим переменным нельзя присваивать ссылки.

Пример:

<?php // пример функции со статической переменной function static_example () {   static $var_static = 1;   $var_static = $var_static * 2;   return $var_static; } echo static_example (); // выведем 2 echo static_example (); // выведем 4 echo static_example (); // выведем 8 ?>

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

Пример:

<?php function f1_example( $par1 ) {   return $par1 + 2; } $var_f = "f1_example"; // значением переменной будет имя функции $var1 = $var_f( 10 );  // при вызове через переменную                        // после имени переменной указываются параметры                        // в круглых скобках                        // в результате вызова $var1 = 12 ?>