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

Функции в 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С Битрикс

Пользовательский тип свойств инфоблока в 1С Битрикс

В дополнение к статье о создании собственного типа пользовательских полей хочу рассказать как делать аналогичные свойства для информационных блоков, т.к. эти свойства относятся к другому модулю, а именно «информационные блоки» (iblock).

Условные операторы в PHP

Условные операторы в PHP

Добрались до логики выполнения программы. И так условные операторы (по другому операторы ветвления) позволяют нам организовать определённое поведение программы в зависимости от входных параметров (данных вводимых пользователем, результатом работы вспомогательных функций). Вся логика в языках программирования основана на Алгебре Буля. 

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

Самые читаемые

Тонкая настройка SEO для результатов фильтрации каталога битрикс

Тонкая настройка SEO для результатов фильтрации каталога битрикс

Одним из преимуществ интернет-магазинов на 1С Битрикс на мой взгляд является наличие не так давно до...

Основы SEO оптимизации сайта

Основы SEO оптимизации сайта

Эта статья не истина в последней инстанции, а лишь набор правил которые я применяю при создании/испр...

Собственный тип пользовательских полей в 1С Битрикс

Собственный тип пользовательских полей в 1С Битрикс

Для решения некоторых задач порой не хватает стандартного набора пользовательских полей поставляемых...