|
|
|
|
|
|
Всякое |
Самые главные функции PHPВсе, кто занимается разработкой и написанием кода делают ошибки. Это относится не только к PHP, а к любому языку программирования. Потому средства отладки занимают важное место в арсенале любого программиста. PHP ими тоже не обделён. Ошибки фатальные, связанные с неправильным синтаксисом обычно выдаются прямо в браузер. Но вот второй тип ошибок, которые называются ошибками времени выполнения отслеживать гораздо труднее. Чаще всего они связаны со значениями переменных вашего скрипта. var_dump — выводит информацию о переменной.Описание аргументов и значений. Функция отображает структурированную информацию об одном или нескольких выражениях, которая включает в себя их тип и значение. Массивы и объекты анализируются рекурсивно с разным отступом у значений для визуального отображения структуры. В PHP 5 все общедоступные, закрытые и защищенные свойства объекта также будут показаны в выводе. Функция выводит непосредственно в браузер. Вывод не отформатирован в HTML-теги, поэтому выводится в одну строчку. Чтобы видеть массивы и отступы, потребуется заключать вывод функции в теги PRE. Для сохранения вывода в строковой переменной, необходимо использовать функции контроля вывода, чтобы перехватывать выводимые этой функцией данные. Функция не возвращает значения после выполнения. array(3) { [0]=> int(1) [1]=> int(2) [2]=> array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" } } print_r() – Выводит информацию о переменной в удобочитаемом виде.Описание аргументов и значений. Array ( [a] => apple [b] => banana [c] => Array ( [0] => x [1] => y [2] => z ) ) Примеры практического кода:Обычный способ использования функций <pre><?php print_r($var) ?></pre> <pre><?php var_dump($var) ?></pre> Если в вашем проекте прямой вывод HTML cразу нежелателен, то вывод функций можно поместить в переменные и использовать их там, где необходимо. $out = '<pre>'.print_r($var,true).'</pre>'; ... print $out; С функцией var_dump() дело оистоит сложнее - для получения ее вывода в переменную необходимо использовать контроль вывода. ob_start(); var_dump($var); $out = ob_get_contents(); ob_end_clean(); ... print $out; Ну а если в полях отображаемого объекта или в переменных содержится HTML-код, то его вывод следует защитить функцией htmlspecialchars(): $out = '<pre>'.htmlspecialchars(print_r($var,true)).'</pre>'; ... print $out; Пользовательское решениеВ случае очень громоздких переменных с большим числом полей содержащих массивы и объекты вывод обоих функций становится неудобен и плохо читаем. В этом случае можно предложить пользовательскую реализацию функции, которая дает более наглядный HTML-код. function print_r_html($val, $key=NULL){ static $i = 0; $i++; $type = gettype($val); $label = isset($key) ? "<strong>".htmlspecialchars($key)."</strong> => " : ""; $style = ($i == 1 ? "" : "display: none; "); print "<div id=\"array_tree_$i\" class=\"array_tree\" style=\"margin-left: 10px\">"; switch ($type) { case "array": case "object": if (isset($key)) { print "<strong><a onclick=\"document.getElementById('"; print "array_tree_element_$i').style.display = "; print "document.getElementById('array_tree_element_$i"; print "').style.display == 'block' ?"; print "'none' : 'block';\" "; print "name=\"array_tree_link_$i\""; print "href=\"#array_tree_link_$i\">".htmlspecialchars($key)."</a></strong> => "; } if($type=="array") print "Array (".count($val).")"; if($type=="object") print "Object <strong>".get_class($val)."</strong>"; print "<div class=\"array_tree_element_\" id=\"array_tree_element_$i\" style=\"$style\">"; foreach($val as $k=>$v) { print print_r_html($v, $k); } print "</div>"; break; case "integer": case "double": print $label . "<em>".htmlspecialchars($val)."</em>"; break; case "boolean": print $label . ($val ? "true" : "false" ); break; case "string": if(strlen($val)>255 && isset($key)) { print "<strong><a onclick=\"document.getElementById('"; print "array_tree_element_$i').style.display = "; print "document.getElementById('array_tree_element_$i"; print "').style.display == '' ?"; print "'none' : '';\" "; print "name=\"array_tree_link_$i\""; print "href=\"#array_tree_link_$i\">".htmlspecialchars($key)."</a></strong> => "; print "<code>".htmlspecialchars(substr($val,0,255)); print "<span id=\"array_tree_element_$i\" style=\"$style\">".htmlspecialchars(substr($val,255))."</span>"; print "</code>"; } else { print $label . "<code>".htmlspecialchars($val)."</code>"; } break; default: print $label.gettype($val); break; } print "</div>"; } В выводе этой функции нескалярные величины (массивы и объекты) свернуты и разворачиваются при щелчке по ним правой кнопкой мыши. Так же происходит обрезание текстовых полей до 255 символов с раскрытием их при щелчке по имени поля. Воронин Валентин, shaman.asiadata.ru |
|
Direqtor Home Page by ASIADATA.
Самый популярный движок магазина - купить в интернет магазине wii. Интернет магазин Top Shop. | Железнодорожные перевозки . | Жидкость для электронных сигарет владивосток.
|
|
Отправить комментарий