Php создать функцию с параметром. Функции в PHP. Создание пользовательских функций

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

Давайте с Вами напишем пример элементарной функции, которая просто печатает "Hello World ":

function printHello() {
echo "Hello World";
}
printHello();
?>

В данном примере мы создали функцию с именем "printHello " без параметров (внутри круглых скобок ничего нет), затем мы в фигурных скобок написали код функции. То есть в данном случае, мы выводим строку. За пределами функции мы её вызываем. Как видите, всё очень просто. Но цена данной функции равна нулю, хотя бы потому, что она работает всегда одинаково. Безусловно, такое бывает нужно, поэтому не надо думать, что такой пример функции вообще бессмыслен. Однако, чаще всё-таки функция требует параметра, и давайте с Вами создадим функцию, которой будем передавать строку, а затем эту строку выводить:

function printHello($str) {
echo $str;
}
printHello("Hello World!!!");
?>

Здесь мы создали функцию, но уже с параметром. И дальше значение этого параметра мы и выводим через echo . За пределами функции printHello() мы её вызываем и передаём строку "Hello World!!! ". Как видите, и тут всё просто.

И последнее, что хочется сказать, так это о параметрах по умолчанию, которые позволяют создавать функции с переменным числом параметров . Предлагаю решить такую задачу: создать функцию, которая будет принимать в качестве первого параметра массив, а в качестве второго параметра - булевскую переменную (true или false ), значение по умолчанию которой будет false :

function printArray ($arr, $bool = false) {
$str = "";
for ($i = 0; $i < count($arr); $i++)
$str .= "Элемент $i = $arr[$i]
";
if ($bool) return $str;
echo $str;
}
$a = array(15, 12, 13, 14);
printArray($a);
$str = printArray($a, true);
echo $str;
?>

Здесь смысл следующий: задача функции - формировать из массива строку, то есть просто превратить массив в строковый тип. В данном примере, самое интересное - это параметр bool , который имеет значение по умолчанию. Если она false (как по умолчанию, то есть если не указывали иного значения), то строка сразу печатается в браузере, а если передали true (как при втором вызове функции), то строка возвращается (return $str ) функцией. Вот такой простой пример на создание функций с параметрами по умолчанию .

Функция - это именованный блок кода, в данном случае на языке PHP, который определяется один раз, а затем может вызываться на исполнение сколько угодно раз.

Определение функции выполняется с помощью ключевого слова function за которым указываются следующие компоненты:

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

    Примечание: имена функций не чувствительны к регистру букв.

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

Синтаксис определения функции выглядит следующим образом:

Function имя_функции([параметры]) { блок кода }

Квадратные скобки () означают необязательность. Теперь приведем простой пример определения функции:

Для вызова функции используется оператор вызова, представляющий из себя пару круглых скобок. Завершается вызов функции как и все инструкции точкой с запятой (;):

При вызове функции исполняются инструкции, расположенные в ее теле.

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

Все функции в PHP имеют глобальную область видимости - они могут быть вызваны вне функции, даже если были определены внутри и наоборот:

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

Из предыдущих уроков вы узнали, что в php есть встроенные функции, например . На примерах вы могли разобраться, что функция может иметь собственные параметры, которые указываются в скобках. В php есть множество встроенных функций для любых целей, но иногда бывает нужно создать свою функцию. Для этого существует конструкция function. Этот простой пример показывает, как нужно создавать функции. Функция создана и вы можете её использовать. Для этого её неоходимо вызвать, как любую стандартную функцию.
Этот пример показывает практически все возможности пользовательской функции. Вы можете задавать параметры, например, $a, $b, $c. Эти переменные требуются для работы функции. Последний параметр (или несколько последних), могут быть предворительно заданы(дополнительные). Если при вызове функции не заполнены дополнительные параметры, то функция работает с теми значениями, которые заданы изначально. В теле функции может быть любой код. Затем идет присвоение значения функции. Т.е. функция вернет значение.
Функция может вернуть массив. Что бы его преобразовать в переменные, можно использовать функцию list:

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

 Если этот сайт оказался вам полезен, вы можете помочь в его развитии, поставив

В любом языке программирования существуют подпрограммы. В языке C они называются функциями, в ассемблере - подпрограммами, а в Pascal существуют даже два вида подпрограмм: процедуры и функции.

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

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

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

Создание пользовательских функций

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

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

function Имя (аргумент1[=значение1],...,аргумент1[=значение1])
{
тело_функции
}

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

Требования, предъявляемые к именам функций:

  • Имена функций могут содержать русские буквы, но давать функциям имена, состоящие из русских букв не рекоммендуется;
  • Имена функций не должны содержать пробелов;
  • Имя каждой пользовательской функции должно быть уникальным. При этом, необходимо помнить, что регистр при объявлении функций и обращении к ним не учитывается. То есть, например, функции funct() и FUNCT() имеют одинаковые имена;
  • Функциям можно давать такие же имена, как и переменным, только без знака $ в начале имен.

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

Приведем примеры использования пользовательских функций.

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

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

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

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

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

" . $_SERVER["REMOTE_ADDR"] . "

"; }

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

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

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

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 "

Зеленых и красных всего - " . $total_green_red . "

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

Зеленых, красных и желтых всего - " . $total_green_red_yellow . "

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

Сумма значений - " . $all . "

";

Понравилось? Лайкни нас на Facebook