Основы PHP
  Что такое PHP?
  Возможности PHP
  Преимущества PHP
  История развития
  Что нового в PHP5?
  «Движок» PHP
  Переход на PHP 5.3
New Переход на PHP 5.6
  Введение в PHP
  Изучение PHP
  Основы CGI
  Синтаксис PHP
  Типы данных PHP
  Переменные в PHP
  Константы PHP
  Выражения PHP
  Операторы PHP
  Конструкции PHP
  Ссылки в PHP
  PHP и ООП
  Безопасность
  Функции PHP
  Функции по категориям
  Функции по алфавиту
  Стандартные функции
  Пользовательские
  PHP и HTTP
  Работа с формами
  PHP и Upload
  PHP и Cookies
  PHP и базы данных
  PHP и MySQL
  Документация MySQL
  Учебники
  Учебники по PHP
  Учебники по MySQL
  Другие учебники
  Уроки PHP
  Введение
  Самые основы
  Управление
  Функции
  Документация
  Математика
  Файлы
  Основы SQL
  Дата и время
  CURL
  Изображения
  Стили
  Безопасность
  Установка
  Проектирование БД
  Регулярные выражения
  Подготовка к работе
  Быстрый старт
  Установка PHP
  Установка MySQL
  Конфигурация PHP
  Download / Скачать
  Скачать Apache
  Скачать PHP
  Скачать PECL
  Скачать PEAR
  Скачать MySQL
  Редакторы PHP
  Полезные утилиты
  Документация
  PHP скрипты
  Скачать скрипты
  Инструменты
  PHP в примерах
  Новости портала
 Главная   »  Пользовательские функции PHP
 
 
 

Пользовательские функции в PHP (Часть 2)

Передача аргументов пользовательским функциям

При объявлении функции можно указать список параметров, которые могут передаваться функции, например:

<?php
function funct($a$b/* ..., */ $z) { ... };
?>

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

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

Согласно сложившимся традициям, во всех языках программирования есть два вида аргументов функций:

  • параметры-значения;
  • параметры-переменные.

Функции не могут изменить параметр-значение, то есть он доступен функции "только для чтения" - она может его использовать, но не более. В качестве параметра-значения необязательно указывать переменную, можно указать само значение, отсюда название - параметр-значение.

По умолчанию аргументы в функцию передаются по значению (это означает, что если вы измените значение аргумента внутри функции, то вне ее значение все равно останется прежним). Приведем пример:

<?php
function funct($string)
{
     echo
"<h3>Параметр = $string </h3>";
}

$str 777;
funct(777);
funct($str);    

// Функция 'funct' выведет строку 'Параметр = 777' дважды

?>

В отличие от параметров-значений, параметры-переменные могут быть изменены в процессе работы функции. Тут уже нельзя передавать значение, нужно обязательно передать переменную. В PHP для объявления параметров-переменных используется механизм передачи переменной по ссылке.

Если вы хотите разрешить функции модифицировать свои аргументы, вы должны передавать их по ссылке.

Если вы хотите, что бы аргумент всегда передавался по ссылке, вы должны указать амперсанд (&) перед именем аргумента в описании функции:

<?php
function funct(&$string)
{
    
$string .= 'а эта внутри.';
}
$str 'Эта строка за пределами функции, ';
funct($str);
echo 
$str;    // Выведет 'Эта строка за пределами функции, а эта внутри.'
?>

Параметры по умолчанию

При программировании часто возникает необходимость создания функции с переменным числом параметров. Тому есть две причины:

  • Параметров слишком много. При этом нет смысла каждый раз указывать все параметры;
  • Функции должны возвращать значения разных типов в зависимости от набора параметров.

В PHP функции могут возвращать любые значения в зависимости от переданных им параметров.

<?php
function makecup($type "Чая")
{
     return 
"Сделайте чашечку $type.\n";
}
echo 
makecup();
echo 
makecup("Кофе");
?>

Результат работы приведенного скрипта будет таким:

Сделайте чашечку Чая
Сделайте чашечку Кофе

PHP также позволяет использовать массивы и специальный тип NULL в качестве значений по умолчанию, например:

<?php  
  
function makecup($types = array("Кофе"), $Maker NULL)  
   {  
      
$device is_null($Maker) ? "сахаром" $Maker;  
       return 
"Сделайте чашечку ".join(", "$types)." с $device.\n";  
   }  
   echo 
makecup();  
   echo 
makecup(array("Кофе""Чая"), "сливками");  
  
?>

Рассмотренный скрипт выведет следующее:

Сделайте чашкчку Кофе с сахаром . Сделайте чашечку Кофе, Чая с сливками.

Значение по умолчанию должно быть константным выражением.

Обратите внимание, что все аргументы, для которых установлены значения по умолчанию, должны находится правее аргументов, для которых значения по умолчанию не заданы, в противном случае ваш код может работать не так, как вы этого ожидаете. Рассмотрим следующий пример:

<?php
function makecup($type "чая"$cond)
{
     return 
"Сделайте чашечку $type $cond.\n";
}
 
echo 
makecup("горячего");   // Не будет работать так, как мы могли бы ожидать
?>

Результат работы приведенного выше скрипта будет примерно следующим:

Warning: Missing argument 2 for makecup() in c:\inetpub\php.su\test.php on line 2
Сделайте чашечку горячего .

Теперь видоизменим рассмотренный скрипт, исправив в нем ошибки:

<?php
function makecup($cond, $type "чая")
{
     return 
"Сделайте чашечку $type $cond.\n";
}
 
echo 
makecup("горячего");   // Теперь наш скрипт работает корректно!
?>

Результат работы исправленного скрипта будет выглядеть следующим образом:

Сделайте чашечку чая горячего.

Внимание! Начиная с PHP 5, значения по умолчанию могут быть переданны по ссылке!

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

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

Реализация этой возможности достаточно прозрачна и заключается в использовании функций func_num_args(), func_get_arg() и func_get_args().

Рассмотрим возможности рассмотренных стандартных функций:

Стандартная функция func_num_args() возвращает колличество аргументов, переданных пользовательской функции:

<?php
function funct()
{
    
$numargums = func_num_args();
     echo
"Колличество аргументов : $numargums\n";
}

funct(1, 2, 3);    // Скрипт выведет 'Колличество аргументов: 3'
?>

Стандартная функция func_get_arg() возвращает элемент из списка переданных пользовательской функции аргументов:

<?php
function funct()
{
     
$numargs = func_num_args();
      echo
"Колличество аргументов: $numargs<br>\n";
      if (
$numargs >= 2) {
      echo
"Второй аргумент : ".func_get_arg(1)."<br>\n";
      }
}

funct(1, 2, 3);
?>

Стандартная функция func_get_args() возвращает массив аргументов, переданных пользовательской функции:

<?php
function funct()
{
    
$numargs = func_num_args();
     echo
"Колличество аргументов : $numargs<br>\n";
     if (
$numargs >= 2) {
         echo
"Второй аргумент: " . func_get_arg(1) . "<br>\n";
     }
    
$arg_list = func_get_args();
     for (
$i = 0; $i < $numargs; $i++) {
         echo
"Аргумент $i is: " . $arg_list[$i] . "<br>\n";
     }
}

funct(1, 2, 3);
?>

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

 
 
 <<< Назад 
 Содержание 
 Вперед >>> 
Есть еще вопросы или что-то непонятно - добро пожаловать на наш  форум портала PHP.SU 
 

 
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS