Опубликован: 01.03.2005 | Уровень: для всех | Доступ: платный
Лекция 5:

Функции в PHP

< Лекция 4 || Лекция 5: 123456 || Лекция 6 >
Аннотация: В лекции рассматриваются: понятие функции, функции, определяемые пользователем, аргументы функций, передача аргументов по значению и по ссылке, значение аргументов по умолчанию и значения, возвращаемые функцией (функция return()). Пример – создание web-интерфейса для генерации HTML-формы.

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

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

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

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

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

<?php
function 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_info
function Save_info($first, $last, $message){
  echo "<br>$message<br>";
  echo "Имя: ". $first . " ". $last . "<br>";
}
Save_info("Федя","Федоров",
          "А я выбрал Lisp");
// Save_info можно вызывать и здесь
?>
Пример 5.1. Определение функции внутри условного оператора

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

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

DataCheck();
DataSave();

function DataCheck(){
// проверка правильности данных
  function DataSave(){
  // сохраняем данные
  }
}
?>
Пример 5.2. Определение функции внутри функции

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

< Лекция 4 || Лекция 5: 123456 || Лекция 6 >
Федор Антонов
Федор Антонов

Здравствуйте!

Записался на ваш курс, но не понимаю как произвести оплату.

Надо ли писать заявление и, если да, то куда отправлять?

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

Сергей Крупко
Сергей Крупко

Добрый день.

Я сейчас прохожу курс  повышения квалификации  - "Профессиональное веб-программирование". Мне нужно получить диплом по этому курсу. Я так полагаю нужно его оплатить чтобы получить диплом о повышении квалификации. Как мне оплатить этот курс?

 

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989