2017-01-16 3 views
2

Я использую laravel в течение длительного времени. В настоящее время я работаю над wordpress. Я любил использовать функцию laravel DD().Как написать собственную функцию DD(), такую ​​же, как laravel?

Но в WordPress я могу можно использовать только эти,

print_r(), 
    var_dump(), 
    var_export().... 

Это все просто расширить Целые массиву или объект.

Но мне нужно расширить и близко механизм Laravel, для обработки массива и объекта.

Я использую следующие в общей дд потребности,

if (!function_exists('dd')) { 
function dd() 
    { 
     echo '<pre>'; 
     array_map(function($x) { var_dump($x); }, func_get_args()); 
     die; 
    } 
} 

Это хорошо работает, но мне нужно стиль и организованной форме перечисления.

Возможно ли это?

+1

Зачем изобретать велосипед? https: // packagist.org/packages/symfony/var-dumper –

+0

@RajenderJoshi Иногда вам нужна резиновая шина вместо одной из дерева или камня. Laravel использует varDumper только для форматирования - поведение _kind of_ отличается, потому что выполнение не останавливается после сброса данных. – Kaspars

ответ

1

Laravel dd на самом деле отличная функция. Тем не менее, проходящий механизм равен var_dump, а затем die.

Пример:

$arr = [1,2,3,4,5,6]; 
var_dump($arr); 
die(); 
+0

Да, вы правы. Но что это за схема. Он не будет разрабатывать весь массив. Потому что в некоторых случаях массив может быть слишком большим. В этом случае мы не могли использовать это. Но laravel делает некоторые вещи, чтобы свести к минимуму эту проблему, сложа руки. –

+0

вы можете установить глубину, на которую пойдет 'var_dump()'. Я не помню, как (я думаю, это может быть в php.ini) – lenswipe

1

Laravel-х dd использует Symfony-х VarDump component. Тогда у вас будет глобально доступная функция dump, которая форматирует выход. Единственное различие заключается в том, что после дампа он не будет «умирать», вам придется делать это вручную, но в большинстве случаев это даже не то, что вам нужно.

  1. Run composer global require symfony/var-dumper (если у вас есть композитор в вашем проекте WordPress)
  2. Добавить auto_prepend_file = ${HOME}/.composer/vendor/autoload.php в файл php.ini;
  3. Время от времени запустите composer global update symfony/var-dumper, чтобы исправить ошибки.

Вот документация для компонента VarDumper. https://symfony.com/doc/current/components/var_dumper.html

Так что ваша dd функция может выглядеть следующим образом:

if (!function_exists('dd')) { 
    function dd() 
    { 
     array_map(function($x) { 
      dump($x); 
     }, func_get_args()); 
     die; 
    } 
} 
2

Вы можете введите это пространство имен в свой класс use Illuminate\Support\Debug\Dumper;, а затем используйте его для своих переменных следующим образом:

(new Dumper)->dump($myVariable); 
2

Ниже мой собственный код. Он может работать в простой PHP (без фреймворка).

function d($data){ 
    if(is_null($data)){ 
     $str = "<i>NULL</i>"; 
    }elseif($data == ""){ 
     $str = "<i>Empty</i>"; 
    }elseif(is_array($data)){ 
     if(count($data) == 0){ 
      $str = "<i>Empty array.</i>"; 
     }else{ 
      $str = "<table style=\"border-bottom:0px solid #000;\" cellpadding=\"0\" cellspacing=\"0\">"; 
      foreach ($data as $key => $value) { 
       $str .= "<tr><td style=\"background-color:#008B8B; color:#FFF;border:1px solid #000;\">" . $key . "</td><td style=\"border:1px solid #000;\">" . d($value) . "</td></tr>"; 
      } 
      $str .= "</table>"; 
     } 
    }elseif(is_resource($data)){ 
     while($arr = mysql_fetch_array($data)){ 
      $data_array[] = $arr; 
     } 
     $str = d($data_array); 
    }elseif(is_object($data)){ 
     $str = d(get_object_vars($data)); 
    }elseif(is_bool($data)){ 
     $str = "<i>" . ($data ? "True" : "False") . "</i>"; 
    }else{ 
     $str = $data; 
     $str = preg_replace("/\n/", "<br>\n", $str); 
    } 
    return $str; 
} 

function dnl($data){ 
    echo d($data) . "<br>\n"; 
} 

function dd($data){ 
    echo dnl($data); 
    exit; 
} 

function ddt($message = ""){ 
    echo "[" . date("Y/m/d H:i:s") . "]" . $message . "<br>\n"; 
} 
Смежные вопросы