Функции в php позволяют выполнять один и тот же алгоритм много раз, как без входных данных, так и с ними. За счет них разрабатываемы программы экономят множество строк кода.
Разберем построение построение функций от простых примеров к более сложным. Например, здесь:
<?php
function fprint() { echo ‘Вывод сообщения’; }
fprint();
?>
Мы создали простую функцию fprint() без параметров, после чего вывели ее значение (в данном случае просто текст), вызвав ее строкой fprint();.
Задав один раз функцию, мы можем использовать ее где-угодно в программе. По этому же принципу мы можем использовать php функции с переменными:
<?php
function fprint2($a, $b) { echo $a.$b; }
fprint2(‘Хорошая новость №’, 14);
?>
В этой функции мы передаем параметры $a, $b, где $a – строка, а $b – число. Параметры внутри функции являются локальными. Это означает, что они будут действовать только внутри функции. Если мы их снова используем вне функции, то они будут считаться “новыми”.
Также при работе с такими функциями, стоит помнить, что если в ней задано два параметра, то ее вызов обязательно должен идти с двумя параметрами. Иначе будет ошибка.
Но, что если нам нужно вызвать функцию с неизвестным количеством параметров, которые как могут передаваться, так и нет. Для этого используем “умные” функции в php. Моя разработка! =)
<?php
/*
Умные функции в php. Позволяет использовать бесконечное количество переменных внутри функции, которые могут как существовать, так и нет за счет ассоциативного массива.
*/
function handlers($tag) {
if (!is_array($tag)) return ”; //если $tag не массив, то ничего не делаем
if(isset($tag[‘name’])) {echo $tag[‘name’].'<br>’;} //если переменная в массиве существует, то выводим ее
if(isset($tag[‘value’])) {echo $tag[‘value’].'<br>’;}
if(isset($tag[‘type’])) {echo $tag[‘type’].'<br>’;}
if(isset($tag[‘dopol’])) {echo $tag[‘dopol’][‘Имя’].’ ‘.$tag[‘dopol’][‘Вес’].’ ‘.$tag[‘dopol’][‘Возраст’];} //данные, которые нужно сгруппировать можно вносить даже в подмассивы
echo ‘<br><br>’;
}
//Разные данные в виде массивов для функций
$tagarray1 = array (“type” => “Животное”, “name” => “Собачка”, “value” => “Такса”); //выведет все данные
$tagarray2 = array (“name” => “Кролик”); //выведет только Кролик, остальные проигнорирует
$tagarray3 = array (“name” => “Попугайчик”, “dopol” => array (“Имя” => “Гриша”, “Вес” => “0.35 кг”, “Возраст” => “2 годика”)); //выведет данные из подмассива dopol
//вывод функций
handlers($tagarray1);
handlers($tagarray2);
handlers($tagarray3);
?>
В этом большом примере мы задаем функцию handlers($tag), в которую передаем всего один параметр $tag, – эта переменная будет являться ассоциативным массивом, внутри которого может быть бесконечно много параметров.
Для примера я подготовил три разных массива $tagarray1 – $tagarray3, которые будут подставляться, как исходные данные в эту функцию.
Функция же проверяет, существует ли тот или иной параметр уже внутри (проверки типа if(isset($tag[‘name’])) ) и в зависимости от этого делает те или иные вычисления. Поэтому если какой-то параметр и вовсе отсутствует, как в $tagarray2, то ошибки в этой php функции не будет.
Большой плюс такой функции а том, что теперь мы можем передавать неизвестное или бесконечно большое количество параметров.