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

Функции в 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)
Вам также могут понравиться
Как подключить CSS и JS файлы к шаблону 1С Битрикс

Как подключить CSS и JS файлы к шаблону 1С Битрикс

Как правильно подключать стили и скрипты к шаблону 1С Битрикс.

Генерация оглавления статьи

Генерация оглавления статьи

В статье рассмотрен пример функции для генерации оглавления статьи блога или новости

Переменные доступные в компоненте 1С Битрикс

Переменные доступные в компоненте 1С Битрикс

В статье разобран список доступных в компоненте 1С Битрикс переменных, позволяющих получить доступ к различным параметрам и методам компонента.


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