Вы находитесь на странице: 1из 3

Лекции курса PHP7 + MySQL с нуля

(краткое содержание)

ЛЕКЦИЯ 23. ФУНКЦИИ. ОСНОВЫ.

Основы функций в PHP


В PHP реализован удобный подход к функциям, подобный строго
типизированным языкам программирования, наподобие C, Java и др. В PHP можно:
- использовать параметры по умолчанию, что означает возможность
создавать функции с переменным числом параметров;
- создавать собственную область видимости переменных и уничтожать их при
выходе из функции;
- использовать инструкцию return для возврата результата вычисления
функции;
- выбирать любой типа возвращаемого значения, в том числе, с
принудительной проверкой при вызове;
- создавать анонимные функции.
Правда, есть один не особенно приятный нюанс при создании функций в PHP
– по умолчанию, все переменные, объявленные внутри функции становятся
локальными для нее. Эту ситуацию возможно исправить несколькими способами,
которые будут рассмотрены далее.
Общий синтаксис функции представляет собой следующий вид:
function имя_Функции(аргумент1[=значение1], аргумент2[=значение2], …,
аргументN[=значениеN]) {
конструкции_тела_функции;
[return выражение];
}
Разберем подробно данный синтаксис:
- function – команда, объявляющая начало объявления функции;
- имя_Функции – имя, которое будет использоваться при вызове этой функции.
Стоит отметить, что имя функции зависит от регистра и должно быть уникальным
среди уже объявленных имен;
- аргумент1 – аргумент функции, который может принимать как форму
переменной, так и выражения;
- [=значение1] – необязательный параметр, обозначающий значение
аргумента1 по умолчанию, в случае, если при вызове функции он не будет указан;
- конструкции_тела_функции – любые языковые конструкции, в том числе,
переменные, циклы, условия, выражения и прочие допустимые в PHP. Допускается
и объявление функции внутри функции или ее вызов, хотя это и не рекомендуется
делать;
- необязательный параметр return – параметр, возвращающий результат
работы функции. Если не указан, то функции присваивается тип void и функция
ничего не возвращает, а лишь выполняет задачи, вложенные в нее.

Пример функции и ее вызова


Рассмотрим на практике простой пример функции и ее вызова:
Листинг 23.1. Пример функции в PHP

//Объявляем тело функции


function new_func($c, $a = 0, $b = 10) {
if($b > $c) {
for($a; $a < $b; $a++) {

1
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

$c += $a * $b;
}
} else {
for($a; $a < $c; $a++) {
$b += $a * $c;
}
}
return $b * $c;
}

//Вызываем функцию
$var1 = new_func(5);
$var2 = new_func(12);
echo "<p>var1 = $var1</p>";
echo "<p>var2 = $var2</p>";

Как видно из листинга 23.1., в теле функции может быть объявлено любое
количество операций в допустимом синтаксисе языка. Кроме того, пример из
листинга можно было бы переделать, убрав инструкцию return и переопределив тип
функции на void:
Листинг 23.2. Функция без инструкции return

//Объявляем тело функции


function new_func($c, $a = 0, $b = 10) {
if($b > $c) {
for($a; $a < $b; $a++) {
$c += $a * $b;
}
} else {
for($a; $a < $c; $a++) {
$b += $a * $c;
}
}
echo "<p>Значение функции: ".($b * $c)."</p>";
}

//Вызываем функцию
new_func(5);
new_func(12);

Кроме того, в связи с тем, что перед выполнением программы, интерпретатор


производит обход кода скрипта, функцию можно объявлять и до ее вызова в теле
программы. Действует, правда, это только в том случае, если и тело функции, и ее
вызов находятся в одном файле – если для вызова используются конструкции
require_once, require, include_once или include – такой подход не сработает.

2
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

Особенности параметров по умолчанию


Отдельно стоит остановиться на параметрах функции по умолчанию. Если в
теле функции присутствуют аргументы, не имеющие параметров по умолчанию и,
наоборот, аргументы, которые могут не задаваться при вызове функции, следует
соблюдать строгий синтаксис объявления каждого из аргументов – сначала идут
аргументы без параметров по умолчанию, затем – с параметрами по умолчанию.
Если сделать что-то наподобие такого:
function func_name($var1 = 100, $var2 = 0, $var3),
то при вызове функции func_name( , , 4) или func_name(4), будет появляться
ошибка, т. к. интерпретатор не понимает, какому из аргументов присвоить значение
4. Таким образом, при объявлении функции, аргументы без параметров по
умолчанию всегда слева, аргументы с параметрами по умолчанию всегда справа.

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


Бывают случаи, когда нам необходимо работать в функции не со значением
аргумента, а непосредственно с самой переменной, которая выступает в качестве
аргумента. В этом случае имя аргумента задается в соответствии с правилами
синтаксиса ссылочных переменных:
function func_name(&$var_a, $var_b = 10, &$var_c) {
тело_функции;
}

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


Бывают случаи, когда нам заранее неизвестно количество параметров,
передаваемых в функцию. В это случае возможно объявление функции с
переменным числом параметров:
function func_name(…$args) {
…;
}
Здесь стоит рассмотреть вариант с переменным количеством аргументов
подробнее. Дело в том, что при объявлении функции с переменным количеством
аргументов, явно задается массив, содержащий эти аргументы и который можно
получить с помощью циклических конструкций, например, foreach():
function func_name(…$args) {
foreach($args as $value) {
echo $v;
}
}
Рассмотрим этот способ на практическом примере:
Листинг 23.3. Переменное количество аргументов функции

function new_func(...$wild_animals) {
foreach($wild_animals as $value) {
$value .= " - дикое животное";
echo "<p>$value</p>";
}
}

new_func('Тигр', 'Лев', 'Медведь', 'Волк');