使用VarDumper進行優雅的PHP調試

來源:互聯網
上載者:User

原文來自: 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的優點,Symfony VarDumper不僅可以做到像var_dump()一樣調試,而且可以做得更好,並不是只靠臉生活的:

  • 你可以輕鬆配置輸出資料的格式:HTML 或者 命令列樣式

  • 對於一些可能重複太多的資料,VarDumper智能過濾將其摺疊起來,並且你可以很完美地看到你的資料的結構是什麼樣的,不清楚的話等下可以看下面的。

  • 每個列印出來的對象或變數都有特定的樣式。

  • 安裝使用之

    說了這麼多之後,我們終於要來一睹廬山真面目了。首先是安裝,最簡單的方法就是直接使用composer安裝,建立一個新的檔案夾php/,我們來測試一下:

    cd php/composer require symfony/var-dumper

    再來建立一個index.php,將自動負載檔案autoload.php包含進來:

      

    首先在index.php寫一個簡單的數組來測試一下:

     'in an array of 5 elements',    'a float' => 1.0,    'an integer' => 1,    'a boolean' => true,    'an empty array' => array(),);dump($var);

    出來的結果是這樣的:

    有沒有覺得很不錯!這裡還要說一點的是:如果你覺得Symfony VarDumper內建的樣式不夠美觀,你可以直接到Dumper/HtmlDumper.php去修改你的自己的樣式,比如你很喜歡github風,你完全可以自己在這個檔案裡面寫你自己的css樣式。

    上面對於數組的表現Symfony VarDumper貌似做得很完美,不僅給我們舒適的高亮,還很清晰的給了我們這個數組的結構。那麼對於php中的stdObject,Symfony VarDumper的表現會是如何呢?我們來看看:

    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 就用 # 表示。不見如此,如果你仔細看圖,你會看到當滑鼠浮在對應的屬性上面的時候,會有一個小小的提示框來提醒我們這個具體是什麼,很完美啊。

    我們既然需要測試,那麼在類中添加對應的方法呢,這個到底會給我們什麼樣的調試反饋呢?

    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);

    表現依然很驚豔:

    在中,你不僅可以很清晰地知道各個方法的類名是什麼,也可以知道this代表的是什麼,甚至還可以知道這個程式碼片段是從第幾行開始第幾行結束的!666...

    最後

    可能很多同學看了這篇文章之後會覺得我們在自訂樣式時直接改檔案不太好,因為這個時候,如果你切換到其他的項目,你還是得重新再安裝一次,難道還得再改一次?不是這樣的,其實我推薦大家的做法是:全域安裝Symfony VarDumper,這樣不僅可以解決樣式一次性問題,還可以讓你在任何項目中使用Symfony VarDumper,安裝方法如下:

    第一步,全域安裝:

    composer global require symfony/var-dumper;

    第二:配置php.ini

    在php.ini中找到auto_prepend_file,然後寫上你相對應的路徑,比如像下面這樣的:

     auto_prepend_file = ${HOME}/.composer/vendor/autoload.php 

    最後,更新composer

    直接命令列執行:

    composer global update

    到這裡,你就可以配置好一個很優雅的調試介面了。反正我是很喜歡,不知道你是什麼感受。

    Happy Hacking

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.