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

Sha*_*jan 8 php wordpress var-dump laravel

我使用laravel很长一段时间.目前我在wordpress上工作.我喜欢使用laravel的DD()功能.

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

   print_r(),
   var_dump(),
   var_export()....
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

可能吗 ?

Kas*_*ars 13

Laravel dd使用symfony的VarDump组件.然后你将有一个全局可用的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;
    }
 }
Run Code Online (Sandbox Code Playgroud)


Ngo*_*Nam 11

d调试功能包中更新了更多功能和最新的功能代码.

(以下答案大约是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";
}
Run Code Online (Sandbox Code Playgroud)


Aru*_*ode 5

Laraveldd实际上是一个很棒的函数。然而,发生机制是var_dump和 然后die

例子:

$arr = [1,2,3,4,5,6];
var_dump($arr);
die();
Run Code Online (Sandbox Code Playgroud)


Raj*_*ara 5

对于可能对 dd() 等 Laravel 感兴趣的其他人,请查看此 repo -

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

  • 如果您查看该库的源代码,就会发现使用原始 Symphony 组件进行复制实际上非常简单。所有逻辑似乎都在这个文件中,并且复制起来非常简单:https://github.com/wanfeiyy/laravel-dd/blob/master/src/Dd/Dumper.php (2认同)

Abd*_*ost 5

作曲家需要 --dev symfony/var-dumper

<?php     
if (! function_exists('dd')) {
            /**
             * Dump the passed variables and end the script.
             *
             * @param  mixed
             * @return void
             */
            function dd()
            {
                array_map(function ($value) {
                    if (class_exists(Symfony\Component\VarDumper\Dumper\CliDumper::class)) {
                        $dumper = 'cli' === PHP_SAPI ?
                            new Symfony\Component\VarDumper\Dumper\CliDumper :
                            new Symfony\Component\VarDumper\Dumper\HtmlDumper;
                        $dumper->dump((new Symfony\Component\VarDumper\Cloner\VarCloner)->cloneVar($value));
                    } else {
                        var_dump($value);
                    }
                }, func_get_args());
                die(1);
            }
        }

?>
Run Code Online (Sandbox Code Playgroud)