web-dev-qa-db-ja.com

laravelと同じ独自のDD()関数を書く方法は?

私はlaravel=を長い間使用していましたが、現在はwordpressを使用しています。laravelのDD()関数を使用するのが大好きです。しかし、wordpress Iこれらしか使用できません

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

これらはすべてarrayまたはobject全体を展開するだけです。しかし、配列とオブジェクトを処理するためのlaravelのexpandおよびcloseメカニズムが必要です。一般的なものとして次を使用しますdd need、

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

うまく機能しますが、スタイルを整えて整理した形式のリストが必要です。

出来ますか ?

Laravelのddはsymfonyの VarDumpコンポーネント を使用します。次に、出力をフォーマットするグローバルに利用可能なdump関数があります。唯一の違いは、ダンプ後に「死ぬ」ことはないということです。手動でそれを行う必要がありますが、ほとんどの場合、それは望みのものではありません。

  1. composer global require symfony/var-dumperを実行します(composerプロジェクトに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;
    }
 }
13
Kaspars

デバッグ関数 パッケージで、以下の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";
}
11
Ngoc Nam

この名前空間をクラスに取り込むことができますuse Illuminate\Support\Debug\Dumper;そして、次のように変数に使用します。

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

Laravel ddは実際には素晴らしい機能です。しかし、受けているメカニズムはvar_dump、次にdie

例:

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

私はこのようにします:

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

いつも使っています。 Sublimeでスニペットを作成しました。

var_masterpiece Chrome拡張機能を使用して、配列キーなどを展開したり折りたたんだりできる素敵な出力を取得します。

2

私はこれが好きです:

function dd($var){ 
    echo "<pre>";
    print_r($var);
    exit;
}
1
Husnain Aslam

パッケージ mp091689/dump-die を使用すると、次のことができます。

dd($variable);

OR

dd($variable1, $variable2, ..);
0
luckyali444