Встроенные функции PHP
В PHP есть более 1000 встроенных функций, каждая из которых выполняет определённую задачу, и любую из них можно вызвать прямо из вашего скрипта. Полный список смотрите в нашем справочнике по PHP.
Пользовательские функции PHP
Вы не ограничены тем, что предоставляет PHP: можно также писать собственные функции.
- Функцию можно представить как группу инструкций, которую можно повторно использовать во всей программе.
- Загрузка страницы сама по себе её не запускает.
- Её код выполняется, только когда вы её вызываете.
Создание функции
Чтобы объявить собственную функцию, напишите ключевое слово function, а затем имя, которое хотите ей дать.
Код функции помещается в пару фигурных скобок: { отмечает его начало, а } — конец.
Примечание: Имена функций должны начинаться с буквы или символа подчёркивания, а регистр букв в них PHP не учитывает.
Совет: Выбирайте имя, которое говорит о том, что делает функция, тогда ваш код будет легче читать.
Синтаксис функции
Общий вид функции, которую вы определяете сами:
function functionName($parameter1, $parameter2) {
// code to be executed
return $value; // optional
}
Пример создания функции
А вот настоящая функция с именем myMessage(), которая выводит приветствие:
function myMessage() {
echo "Hello world!";
}
Вызов функции
Для вызова функции нужны лишь её имя и пара круглых скобок ().
При вызове эта функция выводит «Привет, мир!»:
Вызов функции
Сначала определите myMessage(), а затем запустите её, вызвав:
Вывод: PHP-скрипт
<?php
function myMessage() {
echo "Привет, мир!";
}
myMessage();
?>
Параметры функций PHP
С помощью параметров вы передаёте информацию в функцию. Внутри функции параметр ведёт себя точно так же, как переменная.
Перечислите их в скобках после имени функции через запятую. Ограничений на их количество нет.
Функция с одним параметром
familyName() принимает один параметр, $fname. В каждом вызове передаётся другое имя, которое функция соединяет с одной и той же фамилией, поэтому в каждой строке вывода показано новое имя, а после него «Refsnes»:
Вывод: PHP-скрипт
<?php
function familyName($fname) {
echo "$fname Refsnes.<br>";
}
familyName("Jani");
familyName("Hege");
familyName("Stale");
familyName("Kai Jim");
familyName("Borge");
?>
Функция с двумя параметрами
Этот вариант принимает два параметра, $fname и $year, и выводит оба:
Вывод: PHP-скрипт
<?php
function familyName($fname, $year) {
echo "$fname Refsnes. Год рождения: $year.<br>";
}
familyName("Hege", "1975");
familyName("Stale", "1978");
familyName("Kai Jim", "1983");
?>
Значение параметра по умолчанию в PHP
У параметра может быть запасное значение. Здесь при вызове setHeight() без аргумента используется значение по умолчанию:
Значение параметра по умолчанию
Первый вызов передаёт 350, а второй ничего не передаёт, поэтому $height принимает запасное значение 50:
Вывод: PHP-скрипт
<?php
function setHeight($height = 50) {
echo "Высота равна : $height <br>";
}
setHeight(350);
setHeight(); // будет использовано значение по умолчанию 50
?>
Функции PHP — возврат значений
Когда функция доходит до return, она сразу останавливается и отправляет значение обратно в строку кода, которая её вызвала:
Возврат значений
sum() складывает два своих аргумента и возвращает сумму вызывающему коду:
Вывод: PHP-скрипт
<?php
function sum($x, $y) {
$z = $x + $y;
return $z;
}
echo "5 + 10 = " . sum(5, 10) . "<br>";
echo "7 + 13 = " . sum(7, 13) . "<br>";
echo "2 + 4 = " . sum(2, 4);
?>
Передача аргументов по ссылке
По умолчанию аргументы передаются по значению: функция работает с копией, поэтому исходная переменная, которую вы передали, остаётся без изменений.
При передаче по ссылке копии нет, то есть всё, что функция делает с аргументом, происходит и с исходной переменной. Для этого поставьте оператор & перед параметром:
Передача по ссылке
Поскольку $value является ссылкой, add_five() изменяет саму переменную $num с 2 на 7:
Вывод: PHP-скрипт
<?php
function add_five(&$value) {
$value += 5;
}
$num = 2;
add_five($num);
echo $num;
?>
Переменное число параметров
Иногда нельзя заранее знать, сколько значений получит функция. Поставьте оператор ... перед параметром, и он будет принимать любое их количество. Такая функция называется функцией с переменным числом параметров.
Все значения, собранные этим параметром, поступают в виде массива.
Правил два: у функции может быть только один параметр переменной длины, и он должен стоять последним. Если поместить его в другое место, PHP сообщит об ошибке.
Функция с переменным числом параметров
sumMyNumbers() складывает столько чисел, сколько ей передано, в данном случае шесть:
Вывод: PHP-скрипт
<?php
function sumMyNumbers(...$x) {
$n = 0;
$len = count($x);
for($i = 0; $i < $len; $i++) {
$n += $x[$i];
}
return $n;
}
$a = sumMyNumbers(5, 2, 6, 2, 7, 7);
echo $a;
?>
Аргумент переменной длины как последний аргумент
Обычный параметр может идти первым, если параметр переменной длины стоит на последнем месте:
Вывод: PHP-скрипт
<?php
function myFamily($lastname, ...$firstname) {
$txt = "";
$len = count($firstname);
for($i = 0; $i < $len; $i++) {
$txt = $txt."Привет, $firstname[$i] $lastname.<br>";
}
return $txt;
}
$a = myFamily("Doe", "Jane", "John", "Joey");
echo $a;
?>
Ошибка, когда аргумент переменной длины не последний
Здесь ... стоит у первого из двух параметров, поэтому код завершается с ошибкой:
Вывод: PHP-скрипт
<?php
function myFamily(...$firstname, $lastname) {
$txt = "";
$len = count($firstname);
for($i = 0; $i < $len; $i++) {
$txt = $txt."Привет, $firstname[$i] $lastname.<br>";
}
return $txt;
}
$a = myFamily("Doe", "Jane", "John", "Joey");
echo $a;
?>
PHP — язык со слабой типизацией
Возможно, вы заметили, что ни в одном из примеров до сих пор PHP не сообщалось, какой тип данных хранит переменная.
Дело в том, что PHP сам определяет тип по значению переменной. Когда типы не навязываются, можно, например, прибавить к целому числу числовую строку вроде «5», и ошибки не возникнет.
Объявления типов появились в PHP 7. Они позволяют указать, какой тип данных вы ожидаете, при объявлении функции. Если включить ещё и объявление strict, несоответствие типа останавливает скрипт с ошибкой «Fatal Error».
Режим strict включается с помощью declare(strict_types=1);, и это должна быть самая первая инструкция в файле PHP.
Строгий режим
Здесь объявление strict включено, и функция получает число и строку. Поскольку «5 days» не является целым числом, скрипт завершается с ошибкой:
Вывод: PHP-скрипт
<?php declare(strict_types=1); // требуется строгий режим
function addNumbers(int $a, int $b) {
return $a + $b;
}
echo addNumbers(5, "5 days");
// так как "5 days" не является целым числом, будет выброшена ошибка
?>
Объявления возвращаемого типа в PHP
Объявления типов работают и для инструкции return.
Чтобы задать тип, который возвращает функция, напишите двоеточие : и тип прямо перед открывающей фигурной скобкой { в объявлении.
Объявление возвращаемого типа
Эта функция объявляет float как возвращаемый тип:
Вывод: PHP-скрипт
<?php declare(strict_types=1); // требуется строгий режим
function addNumbers(float $a, float $b) : float {
return $a + $b;
}
echo addNumbers(1.2, 5.2);
?>
Другой возвращаемый тип
Возвращаемый тип не обязан совпадать с типами аргументов, если возвращаемое значение действительно имеет объявленный тип. Здесь результат типа float приводится к int:
Вывод: PHP-скрипт
<?php declare(strict_types=1); // требуется строгий режим
function addNumbers(float $a, float $b) : int {
return (int)($a + $b);
}
echo addNumbers(1.2, 5.2);
?>