double arrow

Функции, определяемые пользователем

Лабораторная работа №4. Функции в PHP

Для чего нужны функции? Чтобы ответить на этот вопрос, нужно понять, что вообще представляют собой функции. В программировании, как и в математике, функция есть отображение множества ее аргументов на множество ее значений. То есть функция для каждого набора значений аргумента возвращает какие-то значения, являющиеся результатом ее работы. Зачем нужны функции, попытаемся объяснить на примере. Классический пример функции в программировании – это функция, вычисляющая значение факториала числа. То есть мы задаем ей число, а она возвращает нам его факториал. При этом не нужно для каждого числа, факториал которого мы хотим получить, повторять один и тот же код – достаточно просто вызвать функцию с аргументом, равным этому числу.

Функция вычисления факториала натурального числа

<?phpfunction fact($n){ if ($n==0) return 1; else return $fact = $n * fact($n-1);}echo fact(3); // можно было бы написать echo (3*2); // но если число большое,echo fact(50); // то удобнее пользоваться функцией, // чем писать echo (50*49*48*...*3*2);?>

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

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

function Имя_функции (параметр1, параметр2,... параметрN){ Блок_действий return "значение, возвращаемое функцией";}

Если прямо так написать в php-программе, то работать ничего не будет. Во-первых, Имя_функции и имена параметров функции (параметр1, параметр2 и т.д.) должны соответствовать правилам наименования в PHP (и русских символов в них лучше не использовать). Имена функций нечувствительны к регистру. Во-вторых, параметры функции – это переменные языка, поэтому перед названием каждого из них должен стоять знак $. Никаких многоточий ставить в списке параметров нельзя. В-третьих, вместо слов блок_действий в теле функции должен находиться любой правильный PHP-код (не обязательно зависящий от параметров). И наконец, после ключевого слова return должно идти корректное php-выражение (что-либо, что имеет значение). Кроме того, у функции может и не быть параметров, как и возвращаемого значения. Пример правильного объявления функции – функция вычисления факториала, приведенная выше.

Как происходит вызов функции? Указывается имя функции и в круглых скобках список значений ее параметров, если таковые имеются:

<?phpИмя_функции ("значение_для_параметра1", "значение_для_параметра2",...);// пример вызова функции – вызов функции // вычисления факториала приведен выше, // там для вычисления факториала числа 3 // мы писали: fact(3); // где fact – имя вызываемой функции, // а 3 – значение ее параметра с именем $n?>

Когда можно вызывать функцию? Казалось бы, странный вопрос. Функцию можно вызвать после ее определения, т.е. в любой строке программы ниже блока function f_name(){...}. В PHP3 это было действительно так. Но уже в PHP4 такого требования нет. Все дело в том, как интерпретатор обрабатывает получаемый код. Единственное исключение составляют функции, определяемые условно (внутри условных операторов или других функций). Когда функция определяется таким образом, ее определение должно предшествовать ее вызову.

<?php$make = true;/* здесь нельзя вызвать Make_event(); потому что она еще не существует, но можновызвать Save_info() */ Save_info("Вася","Иванов", "Я выбрал курс по PHP"); if ($make){// определение функции Make_event() function Make_event(){ echo "<p>Хочу изучать Python<br>"; }}// теперь можно вызывать Make_event()Make_event();// определение функции Save_infofunction Save_info($first, $last, $message){ echo "<br>$message<br>"; echo "Имя: ". $first. " ". $last. "<br>";}Save_info("Федя","Федоров", "А я выбрал Lisp");// Save_info можно вызывать и здесь?>

Пример 1. Определение функции внутри условного оператора

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

<?php/* нельзя сохранить данные, т.е. вызватьфункцию DataSave() до того, как выполненапроверка их правильности, т.е. вызвана функция DataCheck() */ DataCheck();DataSave(); function DataCheck(){// проверка правильности данных function DataSave(){ // сохраняем данные }}?>

Пример 2. Определение функции внутри функции

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

Аргументы функций

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

С помощью аргументов данные в функцию можно передавать тремя различными способами. Это передача аргументов по значению (используется по умолчанию), по ссылке и задание значения аргументов по умолчанию. Рассмотрим эти способы подробнее.

Когда аргумент передается в функцию по значению, изменение значения аргумента внутри функции не влияет на его значение вне функции. Чтобы позволить функции изменять ее аргументы, их нужно передавать по ссылке. Для этого в определении функции перед именем аргумента следует написать знак амперсанд "&".

<?php// напишем функцию, которая бы добавляла// к строке слово checkedfunction add_label(&$data_str){ $data_str.= "checked";}$str = "<input type=radio name=article "; // пусть имеется такая строкаecho $str."<br>"; // выведет элемент формы – // не отмеченную радио кнопкуadd_label($str); // вызовем функциюecho $str."><br>"; // это выведет уже отмеченную // радио кнопку?>

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

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

У нас есть функция, создающая информационное сообщение, подпись к которому меняется в зависимости от значения переданного ей параметра. Если значение параметра не задано, то используется подпись "Оргкомитет.".

<?phpfunction Message($sign="Оргкомитет."){// здесь параметр sign имеет по умолчанию значение "Оргкомитет" echo "Следующее собрание состоится завтра.<br>"; echo $sign. "<br>";}Message(); // вызываем функцию без параметра. // В этом случае подпись – это ОргкомитетMessage("С уважением, Вася."); // В этом случае подпись // будет "С уважением, Вася."?>

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

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

Следующее собрание состоится завтра. Оргкомитет.Следующее собрание состоится завтра. С уважением, Вася.

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

Например, мы хотим внести описание статьи в каталог. Пользователь должен ввести такие характеристики статьи, как ее название, автора и краткое описание. Если пользователь не вводит имя автора статьи, считаем, что это Иванов Иван.

<?phpfunction Add_article($title, $description, $author="Иванов Иван"){ echo "Заносим в каталог статью: $title,"; echo "автор $author"; echo "<br>Краткое описание: "; echo "$description <br>";}Add_article("Информатика и мы", "Это статья про информатику...", "Петров Петр");Add_article("Кто такие хакеры", "Это статья про хакеров...");?>

В результате работы скрипта получим следующее

Заносим в каталог статью: Информатика и мы, автор Петров Петр.Краткое описание: Это статья про информатику... Заносим в каталог статью: Кто такие хакеры, автор Иванов Иван.Краткое описание: Это статья про хакеров...

Если же мы напишем вот так:

<?phpfunction Add_article($author="Иванов Иван", $title, $description){//...действия как в предыдущем примере}Add_article("Кто такие хакеры", "Это статья про хакеров...");?>

То в результате получим:

Warning: Missing argument 3 for add_article() inc:\users\nina\tasks\func\def_bad.php on line 2

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: