|
сложной, переменной, будь то
массив, объект или простая переменная. Как уже говорилось, приведенная функция
исключительно полезна при отладке сценариев (которая в PHP пока еще не особенно
развита).
В PHP версии 4 для аналогичных целей существуют две стандартных функ-
ции — print_r() и var_dump(), но листинг, который они выводят, довольно
неудобен для восприятия человеком.
Листинг 11.16. Функция Dump()
// Вспомогательная функция, делающая всю "грязную" работу
function TextDump(&$Var,$Level=0)
{ if(is_array($Var)) $Type="Array[".count($Var)."]";
else if(is_object($Var)) $Type="Object";
else $Type="";
if($Type) {
echo "$Type\n";
for(Reset($Var),$Level++; list($k,$v)=each($Var);) {
if(is_array($v) && $k==="GLOBALS") continue;
Глава 11. Функции и области видимости 201
for($i=0; $i<$Level*3; $i++) echo " ";
echo "".HtmlSpecialChars($k)." => ", TextDump($v,$Level);
}
}
else echo '"',HtmlSpecialChars($Var),'"'."\n";
}
// Основная функция
function Dump(&$Var)
{ // Подфункция, выводящая практически окончательный результат
if((is_array($Var)||is_object($Var)) && count($Var))
echo "\n",TextDump($Var)," \n";
else
echo "",TextDump($Var),"\n";
}
В реальной жизни следует использовать функцию Dump(). Функция TextDump()
(которая, по правде говоря, и делает всю работу) использует только одну
неизвестную
нам еще функцию — HtmlSpecialChars(), заменяющую в строке символы типа <,
> или " на их HTML-эквиваленты (соответственно, <, > и "). Мы при-
менили дополнительную функцию для того, чтобы вывести сам результат, а главная
функция занимается только форматированием этого результата (вставка его в тэги
или в зависимости от размера вывода).
Несколько советов
по использованию функций
Хочется напоследок сказать еще несколько слов о функциях.
Первое — не допускайте, чтобы ваши функции разрастались до гигантских размеров.
Дробите их на маленькие, по возможности независимые, части, желательно полезные
и сами по себе. Это повысит "читабельность", устойчивость и переносимость ваших
программ. В идеале каждая функция не должна занимать больше 20—30 строк, воз-
можно, за редким исключением. Этот совет применим вообще ко всем языкам про-
граммирования, а не только к PHP.
Второе: как известно, вызов функции тоже отнимает какое-то время, поэтому
распро-
странено мнение, что чем меньше функций, тем быстрее работает программа. Оно в
корне неверно: не стоит обращать внимания на цену вызова функции, пока она сама
об этом не заявит. В конце концов, объединить несколько функций в одну всегда
на
порядок проще, чем разбить одну функцию на несколько. Помните об этом.
Наконец, последнее: больше используйте встроенные, стандартные функции. Прежде
чем писать какую-то процедуру, сверьтесь с документацией — возможно, она уже
Часть III. Основы языка PHP 202
реализована в ядре PHP. Если это так, то не думайте, что сможете написать ее
эффек-
тивнее на PHP — ведь часто самый неэффективный Си-код работает быстрее, чем
самый изящный на PHP. Возможно, лучше пожертвовать объемом за счет быстродей-
ствия — например, при работе с базами данных и сложными файлами лучше приме-
нять стандартные функции сериализации, чем писать более эффективно упаковы-
вающие, но свои, потому что стандартные работают очень быстро. Правда, из этого
правила существуют и исключения: например, я бы не советовал вам использовать
Serialize() для формирования строки, сохраняющейся в Cookies браузера — здесь
лучше написать свои функции. Опять же, тут
|
|