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

Функции в php

Функции в языке программирования PHP могут быть встроенными (стандартная библиотека функций SPL поставляемая вместе языком) или определены пользователем (разработчиком программы). Вне зависимости от происхождения функции, все они имеют схожий синтаксис:

$некотораяПеременная = имя_функции(набор_параметров);

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

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

Давайте рассмотрим несколько простых встроенных функций:


$str = 'Иван Иванов';
$nameLen = strlen($str); // функция вернёт целое число 11

Функция strlen($str) возвращает длину строки $str переданной в функцию в качестве аргумента.

$password = '123456';
//Зашифруем пароль
$hashPassword = md5($password); // Вернёт строку e10adc3949ba59abbe56e057f20f883e

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

Определение функции

Для того чтобы определить собственную функцию в php, используется следующий синтаксис:


function имя_функции(набор_параметров)
{
  тело функции (тут непосредственно идёт работа)
}

Имя функции должно начинаться с буквы или знака подчёркивания, после можно использовать буквы, знаки подчёркивания и цифры. Следует так же отметить что имена функций не чувствительны к регистру, поэтому вы можете вызвать функцию strlen() как strlen(), STRlen(), StrleN() и т.д. но лучше так не делать. Все встроенные в php функции (SPL библиотека) принято вызывать в нижнем регистре.

Давайте для наглядности определим свою собственную функцию приветствия:


function sayHello($userName){
    echo 'Привет ' . $userName . '!';
}

sayHello('Иван'); //функция выведет на экран строку «Привет Иван!»

В приведённом примере я создал простейшую функцию которая принимает один обязательный параметры $userName (имя пользователя), чтобы затем склеить его со строкой и вывести её на экран. Если не передать аргумент $userName — PHP выведет ошибку.

Область видимости переменных

В определении функций в PHP есть особенность. Все переменные которые определяются и используются внутри функции по умолчанию — локальны для этой функции. Для взаимодействия с внешними переменными необходимо использовать инструкцию global или так называемое замыкание.

Давайте рассмотрим пример:


$number = 123; // глобальная область видимости

function showNumber()
{
    echo $number; // ссылка на переменную в локальной области видимости
}

showNumber();

Вызов showNumber() в приведённом примере не даст результата т.к. переменная $number внутри функции локальна и по сути не определена, она не имеет ничего общего с переменной $number с заданным значением 123 до функции.

Если вы хотите использовать $number определённый вначале когда, воспользуйтесь инструкцией global вот так:


$number = 123; // глобальная область видимости

function showNumber()
{
    global $number;
    echo $number;
}

showNumber(); //Выведет 123 на экран

Однако такой подход таки в себе определённый риск. Когда мы обращаемся из функции к глобальной переменной, мы не можем быть уверен в том, что в ней содержится нужное нам значение. Эту переменную просто могут переопределить (даже по ошибке) ранее в коде и функция отработает не правильно. Помимо использования инструкции global вы можете обратиться к специальной переменной PHP  $GLOBALS, где ключом массива будет имя переменной заданной в глобальной области видимости.

$number = 123; // глобальная область видимости

function showNumber()
{
    echo  $GLOBALS['number'];
}

showNumber(); //Выведет 123 на экран

Массив $GLOBALS является суперглобальным массивом так же как и $_GET или $_POST, он доступен в любой области видимости.

Передача по ссылке

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


$num = 5; //Переменная в глобальной области видимости

function increaseNumber(&$number){ //Передача переменной по ссылке
    $number++;
}

increaseNumber($num);

echo $num; //Выведет 6

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

Анонимные функции, замыкания

Анонимные функции (лямбда функции) так же известны как замыкания, это функции не имеющие определённых имён. Чаще всего они используются в качестве callback функций передаваемых в качестве аргумента другим функциям, например функциям сортировки, однако их применение на этом не заканчивается. Замыкания могут быть использованы в качестве значения переменных, в этом случае PHP автоматически преобразует их в экземпляр класса Closure.

Например определим функцию sayHello() как анонимную:


$sayHello = function ($userName){
    echo 'Привет ' . $userName . '!';
};

$sayHello('Мир'); //Выведет «Привет мир!»

При помощи анонимных функций можно передать в локальную область видимости переменную определённую в глобальной области используя конструкцию use():

$userName = 'Мир';

$sayHello = function () use($userName){
    echo 'Привет ' . $userName . '!';
};

$sayHello();

Подобные конструкции часто применяются при обработке маршрутов. Мы рассмотрим это в рамка других статей.

Полезная статья?
(Голосов: 1, Рейтинг: 3.2)
Курсы от партнёров
Хотите освоить востребованную профессию? Воспользуйтесь предложениями от наших партнёров. Пройдите учебный курс по одному из популярных IT направлений.

Все курсы партёнров
Вам также могут понравиться
CSS курсоры

CSS курсоры

В статье рассмотрены возможности изменения курсоров пользователя при помощи CSS

Работа с регистром строк в php

Работа с регистром строк в php

В статье рассмотрены примеры работы с регистром строк в языке PHP, проверка регистра, изменение, инверсия

Работа с циклами в PHP

Работа с циклами в PHP

В статье рассмотрены примеры работы с циклами в PHP


Комментарии
Защита от автоматических сообщений
CAPTCHA
Введите слово на картинке