ホームページ > バックエンド開発 > PHPチュートリアル > VarDumper を使用したエレガントな PHP デバッグ

VarDumper を使用したエレガントな PHP デバッグ

WBOY
リリース: 2016-06-23 13:29:40
オリジナル
892 人が閲覧しました

原文: https://jellybool.com/post/a-brand-new-way-to-test-php-with-symfony-va...

多くの PHP 開発者が書いていると思いますvar_dump() 関数は毎回頻繁に使用されます。多くの人は、変数やインスタンスがどのようなものかを確認するために、die(var_dump($var)) のようなものを直接使用します。たとえば、直接呼び出します。 vdd() など。独自のコードをデバッグするときに使用できます。このメソッドはプログラミングにおいて私にとって非常に長い間使用されてきたため、var_dump() によって生成される現実のスタイルに少し飽きてきました。 なぜなら、var_dump() から得られるものには何の意味もないと言えるからです。少なくとも私たちのようなプログラマにとっては、ハイライト機能がありません。 !受け入れられない。

お互いに会いましょう

その後、以前は良い解決策を見つけるのに苦労していたので、昨日この製品を発見するまで我慢していました:

Symfony VarDumper

テストパターンは次のようになります:

初めてこれを見て、私はすぐにこの製品に恋に落ちました。共有したいことを書かずにはいられませんでした:

まず、Symfony VarDumper の利点について話しましょう。 var_dump() のデバッグと同じことができるだけではありません。

  • 出力データの形式を簡単に設定できます: HTML またはコマンド ライン スタイル

  • 繰り返しが多すぎる可能性のある一部のデータについては、VarDumper がインテリジェントにフィルター処理します折り畳むと、データの構造がどのようになっているかがよくわかります。よくわからない場合は、下のスクリーンショットを見てください。

  • 印刷される各オブジェクトまたは変数には、特定のスタイルがあります。

  • インストールと使用方法

    たくさん話した後、いよいよ廬山の本当の顔を見ることになります。 1 つ目はインストールです。最も簡単な方法は、composer を使用して直接インストールし、新しいフォルダー php/ を作成することです。 テストしてみましょう:

    cd php/composer require symfony/var-dumper
    ログイン後にコピー

    自動ロード ファイル autoload.php を作成します:

    <?phprequire __DIR__.'/vendor/autoload.php';
    ログイン後にコピー

    <?phprequire __DIR__.'/vendor/autoload.php';$var = array(    'a simple string' => 'in an array of 5 elements',    'a float' => 1.0,    'an integer' => 1,    'a boolean' => true,    'an empty array' => array(),);dump($var);
    ログイン後にコピー

    結果は次のようになります:

    素晴らしいと思いますか!ここでもう 1 つ言っておきたいのは、Symfony VarDumper の組み込みスタイルが十分に美しくないと感じる場合は、Dumper/HtmlDumper.php に直接アクセスして独自のスタイルを変更することができます。たとえば、github スタイルが気に入っている場合です。 、ここで自分で完全に変更できます 独自の CSS スタイルをファイルに記述します。

    Symfony VarDumper は、上記の配列パフォーマンスで完璧な仕事をしているようです。快適な強調表示を提供するだけでなく、配列の構造も明確に提供します。それでは、Symfony VarDumper は PHP の stdObject に対してどのように動作するのでしょうか?見てみましょう:

    class Test {    public $prop1 = 10;    private $prop2 = 20;    protected $prop3 = 30;    private $prop4 = 40;    public function __construct($value) {        $this->undefinedProp = $value;    }}$test = new Test(50);dump($test);
    ログイン後にコピー

    結果は次のようになります。ソルガムの色が異なることに注意してください:

    ここで確認できます: public は + で表され、private は - で表され、protected は で表されます。 # 急行。そうではありません。画像を注意深く見てみると、対応する属性の上にマウスを置くと、これが完璧であることを示す小さなプロンプト ボックスが表示されることがわかります。

    テストする必要があるので、対応するメソッドをクラスに追加すると、どのようなデバッグ フィードバックが得られるでしょうか?

    すごいですね

    パフォーマンスは相変わらず素晴らしいです:

    上の図では、各メソッドのクラス名が何であるかだけでなく、これが何を表しているのかが明確にわかるだけでなく、このコード セグメントがどこから来たのかさえもわかります。どの行が始まりどの行が終わるのか! 666...

    最後に

    おそらくこの記事を読んだ多くの学生は、スタイルをカスタマイズするときにファイルを直接変更するのは良くないと考えるでしょう。一度インストールした後、再度変更する必要がありますか?実際、そうではありません。Symfony VarDumper をグローバルにインストールすることをお勧めします。これにより、スタイルの問題が解決されるだけでなく、どのプロジェクトでも Symfony VarDumper を使用できるようになります。

    最初のステップ、グローバルインストール:

    class Test {    public $methodOne;    protected $methodTwo;    public function __construct() {        $this->methodTwo = function() {            return 'I am method 2';        };    }    public function buildFunction() {        $this->methodThree = function() {            return 'I am method 3';        };    }    public function __call($method, $args)    {        if (isset($this->$method)) {            $func = $this->$method;            return call_user_func_array($func, $args);        }    }}$test = new Test();$methodOne = function() {    return 'I am method 1';};$test->methodOne = $methodOne;$test->buildFunction();$test->methodOne();dump($test);
    ログイン後にコピー

    2番目: php.iniの設定

    php.iniでauto_prepend_fileを見つけて、次のような対応するパスを書き込みます:

    composer global require symfony/var-dumper;
    ログイン後にコピー

    最後に、composer を更新します

    直接コマンドライン実行:

     auto_prepend_file = ${HOME}/.composer/vendor/autoload.php 
    ログイン後にコピー

    この時点で、非常にエレガントなデバッグ インターフェイスを構成できます。とにかく、私はとても気に入っています、あなたの気持ちはわかりません。

    ハッピーハッキング

    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート