PHP: Что такое функция

Источник: «What Is A PHP Function?»
Важно понимать, что такое PHP функция. Мы разберём, что такое PHP функция, сколько существует PHP функций, и рассмотрим примеры PHP функций.

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

Какую роль PHP функции играют в разработке

Использование функций помогает оптимизировать разработку за счёт:

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

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

Сколько функций в PHP

В PHP содержится около 700 функций используемых для разнообразных задач.

Примеры PHP функций

Пример PHP функции: Определения и Атрибуты

Имея вышеописанное определение, давайте рассмотрим некоторые определения и атрибуты функций:

<?php
function x5($number)
{
return($number * 5);
}

$multiple_number = x5(10); // 50

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

Ключевое слово function начинает определение функции. В данном случае имя функции x5. Переменные в скобках указывают аргументы функции и то, как на них будут ссылаться внутри функции. В этом случае есть один аргумент, на который будет ссылаться переменная $number внутри функции. (Позже мы поговорим о необязательных аргументах и области видимости переменных).

Пример PHP функции: Необязательные Аргументы

Давайте рассмотрим пример PHP функции с необязательными аргументами:

<?php
function optionalDemo($greeting, $count = 1)
{
for ($i = 0; $i < $count; $i++)
{
echo $greeting. "\n";
}
}

optionalDemo("Hello");
optionalDemo("Good Bye" , 2);

Как и в предыдущем примере, это полный сегмент кода. Выражение на котором нужно сосредоточиться, — это определение функции. Обратите внимание, что эта функция ожидает два аргумента, на которые внутри функции будут ссылаться как $greeting и $count. Кроме того, обратите внимание, что второму параметру, Scount, присвоено значение по умолчанию 1. Это работает следующим образом: если функция вызывается с одним параметром (как, при первом вызове функции), то второму параметру будет присвоено значение по умолчанию 1. Это, в свою очередь, приведёт к однократному выполнению цикла for внутри функции.

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

Пример PHP функции: Область видимости переменных

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

function scopedemo($fruit)
{
$fruit = 20;
echo $fruit; // 20
}

$fruit = 10;
scopedemo($fruit);
echo $fruit; //10

В этом примере показано определение функции, а также вызов функции. Следует отметить, что переменная с именем $fruit используется как внутри, так и вне функции, что заставляет подумать, что она представляет одно и то же значение (например, одну и ту же область памяти), но это не так.

Как показывают комментарии в приведённом выше коде, $fruit внутри функции представляет другое значение/область памяти, чем $fruit вне функции. Если вы хотите получить доступ к одному и тому же значению/области памяти внутри и вне функции, можно использовать ключевое слово global.

Глядя на приведённый выше пример, если бы оператор global $fruit был добавлен в определение функции, то ссылка на него внутри функции была бы тем же значением или областью памяти вне функции. Итак, в этом случае $fruit внизу пример кода будет иметь значение 20.

Пример PHP функции: Переменные как Ссылка

Наконец, переменные могут быть переданы в качестве ссылки. Передача по ссылке приводит к добавлению новой записи в таблицу символов PHP, которая ссылается на внутреннюю структуру данных, содержащую тип и значение переменной. Рассмотрим приведённый выше пример в последний раз. Если бы вызов scopedemo использовал амперсанд & перед переменной (например, scopedemo(&$fruit)), то внутри функции в таблицу символов была бы добавлена новая запись для той же структуры данных, представляющей значения переменных. Это, по сути, ограничивает область действия переменной как внутри, так и вне функции.

Пример PHP функции: Рекурсия

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

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

function factorial($n) {

if ($n < 2) {
return 1;
} else {
return ($n * factorial($n - 1));
}
}

Пример PHP функции: Анонимные Функции

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

Рассмотрим более ранний пример, представленный в виде анонимной функции:

function($number)
{
return($number * 5);
};

Код этой анонимной функции никогда не будет вызван. Точка с запятой в конце определения гарантирует, что функция рассматривается как выражение. Поскольку она обрабатывается как выражение, её можно присвоить переменной и вызывать путём ссылки на переменную. Её так же можно передать другой функции, что делает анонимную функцию — функцией обратного вызова (callback функцией).

Ещё одно замечание по поводу анонимных функций заключается в том, что они могут быть возвращены из другой функции. Это называется замыканием (closure).

Пример PHP функции: Новый синтаксис анонимной функции

В PHP 7.4 был представлен новый синтаксис анонимной функции:

$double = fn($param1) => 2*$param1;

Использование стрелочной функции (=>) позволяет использовать сокращённую форму записи замыкания для создания однострочных функций. Это полезно при написании более компактного кода.

Также обратите внимание, что ключевое слово return необязательно для одиночных выражений. В приведённом выше примере возвращается 2*$param1.

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

PHP Функции и методы: В чём разница

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

class car
{
public $make;
private $model;

function __construct($make, $model)
{
$this->make = $make;
$this->model = $model;
}

function printMake()
{
echo $this->make . "\n";
}
}
$mustang = new car("Ford", "Mustang");
$mustang->printMake();
$camaro = new car("Chevrolet", "Camaro");
$camaro->printMake();
/*
Ford
Chevrolet
*/

Посмотрите на выделенную часть приведённого выше кода. Обратите внимание, что хотя мы находимся в определении класса, ключевое слово function определяет то, что объектно-ориентированные разработчики называют методом. Так что на самом деле метод может быть назван другим именем — функция.

Как и функции, методы могут работать с аргументами и содержать блоки кода.

Однако в объектно-ориентированном мире:

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

Дополнительные материалы

Предыдущая Статья

Laravel: Сокращение дублирования кода

Следующая Статья

PHP: Что такое Класс