Как создавать функции в PHP

Объявление пользовательских функций для их вызова и применения в ваших PHP-сценариях

Дата публикации: 26.07.2013

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


/**
  * Объявляем простую пользовательскую функцию
  */
function userFunction() {

}

Если в теле функции присутствует более одной инструкции, все инструкции должны быть помещены внутрь фигурных скобок {}. Если у функции есть только одна инструкция, фигурные скобки не обязательны. Но я рекомендую вам всегда их использовать.

В PHPесть стандартные функции, имена которых вам нельзя будет использовать в своих. Если вы захотите создать функцию с именем date()или time(), вы получите сообщение об ошибке, связанное с попыткой переопределения функции. В PHP функции можно объявлять только один раз. Переопределение функций запрещено. Обычно функции определяются в самом начале скрипта (чаще в отдельных файлах, подключаемых к основному сценарию) до начала основного сценария. Создадим функцию для вывода на экран IP-адреса пользователя.

Несмотря на то, что статья была опубликована 26 июля 2013 года, она всё ещё остаётся самой популярной и просматриваемой среди остальных на сайте 0_О.

Ребята, ну вы чё?


/**
  * Функция вывода IP-адреса пользователя.
  * IP-адрес берется из суперглобального массива PHP $_SERVER
  * который содержит важные данные о соединении и сервере
  */
function userIP() {
	print "<p>" . $_SERVER['REMOTE_ADDR'] . "</p>";
}

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


userIP();	// Выведет на экран IP-адрес пользователя вида 127.0.0.1

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

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

Суперглобальные массивы

$_SERVER,$_SESSION,$_COOKIEи другие — это суперглобальные массивы. Их данные доступны в любом месте сценария. Вот лишь несколько из них:

  • $_SERVER['REMOTE_ADDR']— IP-адрес пользователя;
  • $_SERVER['SERVER_NAME']— имя сервера;
  • $_SERVER['DOCUMENT_ROOT']— корневой каталог сайта;
  • $_SERVER['REQUEST_URI']— запрошенный адрес документа.

Аргументы функции

Если функция должна иметь доступ к данным переменной или константы, объявленных вне её тела, эти данные ей можно передавать в виде аргументов. Каждая функция может принимать любое количество аргументов (параметров), в том числе и нулевое. В приведенном примере мы не передавали функции никакие аргументы. Рассмотрим другой пример.


/**
  * Объявляем пользовательскую функцию для суммирования двух произвольных значений
  */
function amount($value_1, $value_2) {	// Функция должна принять 2 обязательных аргумента
	print $value_1 + $value_2;			// И вывести на экран сумму этих аргументов
}
$green_apples = 10;		// У нас есть 10 зеленых яблок
$red_apples = 4;		// И еще есть 4 красных яблока

// Общее количество яблок мы можем узнать с помощью вызова функции amount()
// Функция amount() должна принять два аргумента, которыми будут являться количества яблок
amount($green_apples, $red_apples);		// Выведет на экран 14

Необязательные параметры (параметры по умолчанию) функции

У функции может иметься неограниченное количество аргументов (параметров), среди которых могут быть необязательные (в том числе и все). Для того, чтобы сделать аргумент функции необязательным, ему нужно присвоить значение по умолчанию при объявлении функции.


/**
  * Объявляем функцию со значениями по умолчанию
  */
function amount($value_1, $value_2, $value_3 = 0) {
	print $value_1 + $value_2 + $value_3;
}

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


/**
  * Подсчитываем общее количество яблок
  * На этот раз функция amount() принимает три аргумента,
  * но третий является необязательным, так как его значение
  * было определено при объявлении функции, если мы третий
  * аргумент не укажем, он останется равным нулю
  */
  
$geen_apples = 11;
$red_apples = 7;

amount($green_apples, $red_apples);		// Выведет на экран 18

// Находим у себя в кладовой, внезапно, ещё 10 желтых яблок
$yellow_apples = 10;

// И их тоже нужно учесть
amount($green_apples, $red_apples, $yellow_apples);		// Выведет на экран 28

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

Для PHP версий 8.0.0 и выше данное предостережение уже не актуально.

function userF($v1, $v2 = 100, $v3) {		// К хорошему не приведет
	print $v1 + $v2 + $v3;
}

Возвращение значения

Одной из главный особенностей функций является их способность возвращать результат. Не всегда в сценарии необходимо что-то делать с результатом работы функции. Чаще его нужно просто сохранить и использовать в другом месте сценария совсем для других целей[?] собственно, для вывода некоего значения на экран функции вообще практически никогда не используются.. Для того, чтобы функция вернула значение в то место сценария, из которого она была вызвана, необходимо воспользоваться операторомreturn. Любой код, который следует за оператором return, не выполняется (если оператор return сработал как надо).


/**
  * Объявляем пользовательскую функцию для суммирования яблок
  * одно из значений является заданным по умолчанию.
  * Функция просто суммирует значения аргументов, и возвращает
  * их сценарию, не выводя на экран.
  */
function amount($value_1, $value_2, $value_3 = 0) {
	$result = $value_1 + $value_2 + $value_3;	// Просто складываем значения аргументов функции
	return $result;								// Возвращаем результат сценарию. Переменная $result является локальной
												// и конкретно её значение не будет доступно вне тела функции
}

$green_apples = 9;		// у нас есть 9 зеленых яблок
$red_apples = 14;		// И еще 14 красных яблок

// Всего у нас...
$total_green_red = amount($green_apples, $red_apples);	// Оператор return функции amount() вернет значение 23,
														// которое присвоится переменной $total_green_red

// Нам принесли еще 7 желтых яблок
$yellow_apples = 7;

// И теперь у нас...
$total_green_red_yellow = amount($green_apples, $red_apples, $yellow_apples);	// Вернет значение 30 и запишет его в переменную 
																				// $total_green_red_yellow
																				
$all = amount($total_green_red, $total_green_red_yellow);	// Вернет значение 53

// Выведет на экран Зеленых и красных всего - 23
print "<p>Зеленых и красных всего - " . $total_green_red . "</p>";

// Выведет на экран Зеленых, красных и желтых всего - 30
print "<p>Зеленых, красных и желтых всего - " . $total_green_red_yellow . "</p>";

// Выведет на экран Сумма значений - 53
print "<p>Сумма значений - " . $all . "</p>";

  • Я опубликовал эту статью:26.07.2013
  • 22 139
  • Яндекс.Метрика

Меню сайта

Settings

Performance

CPU Load
60%
CPU Temparature
42°
RAM Usage
6,532 MB

Customer care

Reports

Projects

May 14, 2020

Upcoming events

12:00

Donec laoreet fringilla justo a pellentesque

13:20

Nunc quis massa nec enim

14:00

Praesent sit amet