Умные функции в php с любым количеством входных данных

Функции в 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 функции не будет.

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


Введите капчу: