Самые главные функции PHP

Все, кто занимается разработкой и написанием кода делают ошибки. Это относится не только к PHP, а к любому языку программирования. Потому средства отладки занимают важное место в арсенале любого программиста. PHP ими тоже не обделён. Ошибки фатальные, связанные с неправильным синтаксисом обычно выдаются прямо в браузер. Но вот второй тип ошибок, которые называются ошибками времени выполнения отслеживать гораздо труднее. Чаще всего они связаны со значениями переменных вашего скрипта.
К примеру, какая-нибудь функция ожидает булево значение, а оно на самом деле целое. Масса проблем связана с NULL-значениями. Неявное преобразование типов в PHP тоже добавляет головной боли. В любом проекте рано или поздно наступает момент, когда просто необходимо узнать, а все ли внутри выглядит и происходит так, как было вами задумано и спроектировано.
Поэтому, можете со мной не соглашаться, но я считаю, что главными функциями в PHP являются две: print_r и var_dump. Именно они и позволяют просмотреть значения и типы переменных скрипта во время его выполнения, что является самым простым и доступным способом его отладки.

var_dump — выводит информацию о переменной.

Описание аргументов и значений.
void var_dump ( mixed $expression [, mixed $expression [, $... ]] )

Функция отображает структурированную информацию об одном или нескольких выражениях, которая включает в себя их тип и значение. Массивы и объекты анализируются рекурсивно с разным отступом у значений для визуального отображения структуры. В PHP 5 все общедоступные, закрытые и защищенные свойства объекта также будут показаны в выводе. Функция выводит непосредственно в браузер. Вывод не отформатирован в HTML-теги, поэтому выводится в одну строчку. Чтобы видеть массивы и отступы, потребуется заключать вывод функции в теги PRE. Для сохранения вывода в строковой переменной, необходимо использовать функции контроля вывода, чтобы перехватывать выводимые этой функцией данные. Функция не возвращает значения после выполнения.
Список параметров
$expression – Выражение для вывода в браузер. Выводимых выражений или переменных может быть несколько. 
Примерный вид вывода функции var_dump():

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() – Выводит информацию о переменной в удобочитаемом виде.

Описание аргументов и значений.
mixed print_r ( mixed $expression [, bool $return ] )
print_r() и var_dump() могут также показывать защищенные (protected) и закрытые (private) атрибуты объектов в PHP 5. Статические элементы класса не будут отображены. Следует помнить, что print_r() установит внутренний указатель массива в его конец. Используйте функцию reset() для установки его в начало массива.
Список параметров
$expression – Выражение для вывода в браузер.
$return –  Если Вы хотите перехватить вывод print_r(), используйте параметр $return . Если его значение равно TRUE, то print_r() вернет результат вывода вместо вывода в браузер (который производится по умолчанию). При выводе функция использует внутренний буфер вывода, поэтому  ее нельзя использовать с этим параметром после вызова функции контроля вывода ob_start(). Параметр  $return появился только в версии 4.3.0. В более ранних версиях приходилось использовать функции контроля вывода.
Возвращаемые значения
Если в функцию передаются значения типов string, integer или float, будет напечатано само значение. Если передается массив array, значениия будут напечатаны в формате, показывающем ключи и элементы массива. Аналогичный формат вывода используется для объектов.
До версии 4.0.4 print_r() будет зацикливалась, если передавался массив или объект, который содержал прямую или косвенную ссылку на себя. В более старших версиях такой массив или объект обозначается словом *RECURSIVE*
Примерный вид вывода print_r() более компактен, чем у var_dump(), но не содержит информации о типах переменных:

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> =&gt; " : "";
  $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> =&gt; ";
      }
      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> =&gt; ";
        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
 

Хотелось бы посмотреть

Хотелось бы посмотреть примеры применения данной функции, и вывод который она генерирует, А то так непонятно как то :)

Есть бесплатные видео уроки

Есть бесплатные видео уроки по php: http://life-prog.ru/video.php

THANKS

THANKS...that was so helpfulllllllllllllll!! great JOB! please publish it on

http://php.net/manual/en/function.print-r.php

GOOD JOB dude....

Don't mention it.

Don't mention it.

А как функцию strtotime на

А как функцию strtotime на завтрашний день применить?вот как тут про strtotime написано,но только на завтрашний.

Скорми ей tomorrow

Скорми ей tomorrow

There are two kinds of coach

There are two kinds of coach outlet.One is that it never sells louis vuitton outlet.The other one,on the contrary,is specialized in louis vuitton sale.However,different state charges different tax,so the price of the goods is also different.Besides,you cannot buy some special goods as many as you can.There is a minim confinement.
Except cheap price,another feature is that those goods are simple.They do not have too many accessories.So they give ray ban sunglasses a sense of refreshment coach outlet store online and simplicity.As the saying goes simplicity is equal to beauty.
coach outlet online

If you want to go to http://www.louis2012.net but have no idea where to go,you can search online.It is no doubt that there is much information about it for your reference.There are several ways to get cheap coach products at coach outlet store online.Coach outlet may be one of the best options.The louis vuitton outlet store most important reason is that you can buy real coach products at the coach outlet online store.You can have bigger savings and discount ray ban glasses at the same time.One of the most impressive things is that you can get the latest designs together with discounted products at coach outlet stores.

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

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <s> <u> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. Beside the tag style "<foo>" it is also possible to use "[foo]".
  • Images can be added to this post.

Подробнее о форматировании

CAPTCHA
Защита от спама: ответьте на вопрос.
Image CAPTCHA
Введите символы с картинки. Только заглавные буквы английского алфавита.