如何编写自己的DD()函数与laravel相同?

问题描述 投票:7回答:6

我使用laravel很长一段时间,但目前我使用wordpress。我喜欢使用laravel的DD()功能。

但在wordpress中,我只能使用这些,

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

这些都只是扩展整个数组或对象。

但我需要laravel的扩展和关闭机制来处理数组和对象。

我使用以下作为一般dd需要,

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

它运作良好,但我需要一种风格化和有组织的列表形式。

可能吗 ?

php wordpress laravel var-dump
6个回答
13
投票

Laravel的dd使用symfony的VarDump component。然后你将有一个全局可用的dump函数,它格式化输出。唯一的区别是它在转储后不会“死”,你必须手动完成 - 但在大多数情况下甚至不是你想要的东西。

  1. 运行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;
    }
 }

9
投票

我在d包中更新了debug functions函数的更多函数和最新代码。

(以下答案大约是1年前。)

======================================

以下是我自己的代码。它可以在普通的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";
}

4
投票

Laravel dd实际上是一个很棒的功能。然而,正在进行的机制是var_dump然后die

例:

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

4
投票

您可以在类use Illuminate\Support\Debug\Dumper;中引入此命名空间,然后将其用于您的变量,如下所示:

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

3
投票

对于其他可能对Laravel感兴趣的人,比如dd(),请查看此回购 -

https://github.com/wanfeiyy/laravel-dd


2
投票

我是这样做的:

function dd($a){
    var_dump($a);
    exit;
}

我用它所有的时间。甚至在Sublime中为它创建了一个Snippet。

我还使用var_masterpiece Chrome扩展来获得一个不错的输出,我可以扩展和折叠数组键等。


0
投票

你可以使用包mp091689/dump-die然后你可以做:

dd($variable);

要么

dd($variable1, $variable2, ..);
© www.soinside.com 2019 - 2024. All rights reserved.