15 февраля 2006

Параметры-атрибуты в PHP

В XML-основанных языках (HTML, ColdFusion) есть замечательная вещь: передача параметров через атрибуты. Например:

<input type="checkbox" value="check" onclick="SelectAll"/>



Что мы тут видим? Какому-то объекту "input" на обработку передаются три параметра:

  • type
  • value
  • onclick

причём каждый из них имеет своё значение.

Что измениться, если мы эти атрибуты поменяем местами? Ничего. Это раз - передача параметров не привязана к их месту, в отличие от позиционных функций в РНР, где, например, в вызове функции explode() первым параметром идёт именно разделитель, вторым - именно входная строка.

Далее, у объекта "input" могут быть несколько дополнительных необязательных атрибутов, которых нет в вызове, но которые, будучи вызванными, заставят объёкт вести себя совершенно по-другому. Что c этим делать в РНР? Можно попробовать перегрузить методы, если есть класс, а можно всем входным параметрам функции задать дефолты, чтобы можно было вызывать функцию с любыми комбинациями параметров.

Но это всё не удобно. Выход, как мне кажется - в передаче функции единственного параметра, и тип его - ассоциативный массив или объект.

Допустим, по аналогии с вышеприведённым примером, в РНР у нас есть функция "input". Формируем параметр и передаём его функции:

<?
$arr = array();
$arr["type"] = "checkbox";
$arr["value"] = "check";
$arr["onclick"] = "SelectAll";

input($arr);
?>

1 комментов:

Анонимный комментирует...

Сочувствую пыхапистам:
def somefunc(first,second):
print first,second
somefunc(1,2)
1 2
somefunc(second=1,first=2)
2 1

Это python.

Отправить комментарий