摘要:每個(gè)打印出來(lái)的對(duì)象或變量都有特定的樣式。安裝使用之說(shuō)了這么多之后,我們終于要來(lái)一睹廬山真面目了。
很多PHP開(kāi)發(fā)者在寫(xiě)代碼的時(shí)候用到var_dump()這個(gè)函數(shù),很多人都會(huì)直接用類(lèi)似die(var_dump($var))來(lái)查看一個(gè)變量或者一個(gè)實(shí)例到底是長(zhǎng)什么樣的,稍微有一些人可能還直接封裝過(guò):比如直接叫一個(gè)vdd()等,以便于自己在調(diào)試自己的代碼的時(shí)候使用。這種方式一直陪伴著我走過(guò)了這么久的編程時(shí)光,以至于造成了對(duì)var_dump()出來(lái)的現(xiàn)實(shí)樣式都有一點(diǎn)審美疲勞了:因?yàn)関ar_dump()出來(lái)的可以說(shuō)是完全沒(méi)有什么美感啊,至少對(duì)于像我們這些代碼工作者來(lái)說(shuō):你竟然沒(méi)有高亮!!不能接受。
相遇
然后之前苦于沒(méi)有找到很好的解決方案,也就是一直這樣忍受著過(guò)來(lái)了,直到昨天我發(fā)現(xiàn)了這貨:
Symfony VarDumper
測(cè)試樣式是長(zhǎng)這樣的:
我第一眼看到這個(gè)的時(shí)候就馬上愛(ài)上這貨了,忍不住要寫(xiě)點(diǎn)東西來(lái)分享一下:
先來(lái)說(shuō)說(shuō)Symfony VarDumper的優(yōu)點(diǎn),Symfony VarDumper不僅可以做到像var_dump()一樣調(diào)試,而且可以做得更好,并不是只靠臉生活的:
你可以輕松配置輸出數(shù)據(jù)的格式:HTML 或者 命令行樣式 對(duì)于一些可能重復(fù)太多的數(shù)據(jù),VarDumper智能過(guò)濾將其折疊起來(lái),并且你可以很完美地看到你的數(shù)據(jù)的結(jié)構(gòu)是什么樣的,不清楚的話等下可以看下面的截圖。 每個(gè)打印出來(lái)的對(duì)象或變量都有特定的樣式。
安裝使用之
說(shuō)了這么多之后,我們終于要來(lái)一睹廬山真面目了。首先是安裝,最簡(jiǎn)單的方法就是直接使用composer安裝,創(chuàng)建一個(gè)新的文件夾php/,我們來(lái)測(cè)試一下:
cd php/
composer require symfony/var-dumper
再來(lái)創(chuàng)建一個(gè)index.php,將自動(dòng)加載文件autoload.php包含進(jìn)來(lái):
require __DIR__."/vendor/autoload.php";
首先在index.php寫(xiě)一個(gè)簡(jiǎn)單的數(shù)組來(lái)測(cè)試一下:
require __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);
出來(lái)的結(jié)果是這樣的:
有沒(méi)有覺(jué)得很不錯(cuò)!這里還要說(shuō)一點(diǎn)的是:如果你覺(jué)得Symfony VarDumper自帶的樣式不夠美觀,你可以直接到Dumper/HtmlDumper.php去修改你的自己的樣式,比如你很喜歡github風(fēng),你完全可以自己在這個(gè)文件里面寫(xiě)你自己的css樣式。
上面對(duì)于數(shù)組的表現(xiàn)Symfony VarDumper貌似做得很完美,不僅給我們舒適的高亮,還很清晰的給了我們這個(gè)數(shù)組的結(jié)構(gòu)。那么對(duì)于php中的stdObject,Symfony VarDumper的表現(xiàn)會(huì)是如何呢?我們來(lái)看看:
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);
出來(lái)的結(jié)果是這樣的,注意它的高粱顏色有不一樣了:
這里可以看到:public就用 + 表示,private 就用 - 表示,而protected 就用 # 表示。不見(jiàn)如此,如果你仔細(xì)看圖,你會(huì)看到當(dāng)鼠標(biāo)浮在對(duì)應(yīng)的屬性上面的時(shí)候,會(huì)有一個(gè)小小的提示框來(lái)提醒我們這個(gè)具體是什么,很完美啊。
我們既然需要測(cè)試,那么在類(lèi)中添加對(duì)應(yīng)的方法呢,這個(gè)到底會(huì)給我們什么樣的調(diào)試反饋呢?
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);
表現(xiàn)依然很驚艷:
在上圖中,你不僅可以很清晰地知道各個(gè)方法的類(lèi)名是什么,也可以知道this代表的是什么,甚至還可以知道這個(gè)代碼段是從第幾行開(kāi)始第幾行結(jié)束的!666...
最后
可能很多同學(xué)看了這篇文章之后會(huì)覺(jué)得我們?cè)谧远x樣式時(shí)直接改文件不太好,因?yàn)檫@個(gè)時(shí)候,如果你切換到其他的項(xiàng)目,你還是得重新再安裝一次,難道還得再改一次?不是這樣的,其實(shí)我推薦大家的做法是:全局安裝Symfony VarDumper,這樣不僅可以解決樣式一次性問(wèn)題,還可以讓你在任何項(xiàng)目中使用Symfony VarDumper,安裝方法如下:
第一步,全局安裝:
composer global require symfony/var-dumper;
第二:配置php.ini
在php.ini中找到auto_prepend_file,然后寫(xiě)上你相對(duì)應(yīng)的路徑,比如像下面這樣的:
auto_prepend_file = ${HOME}/.composer/vendor/autoload.php
最后,更新composer
直接命令行執(zhí)行:
composer global update
到這里,你就可以配置好一個(gè)很優(yōu)雅的調(diào)試界面了。反正我是很喜歡,不知道你是什么感受。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22761.html
摘要:每個(gè)打印出來(lái)的對(duì)象或變量都有特定的樣式。安裝使用之說(shuō)了這么多之后,我們終于要來(lái)一睹廬山真面目了。 原文來(lái)自: https://jellybool.com/post/a-brand-new-way-to-test-php-with-symfony-va... 相信很多PHP開(kāi)發(fā)者在寫(xiě)代碼的時(shí)候都會(huì)經(jīng)常用到var_dump()這個(gè)函數(shù),很多人都會(huì)直接用類(lèi)似die(var_dump...
摘要:不通過(guò)日志獲取執(zhí)行的原生語(yǔ)句和打印變量數(shù)據(jù)打印變量數(shù)據(jù)可以這樣寫(xiě)引用命名空間使用使用第二個(gè)參數(shù)是數(shù)組的深度第三個(gè)參數(shù)是是否顯示代碼高亮默認(rèn)不顯示從數(shù)據(jù)庫(kù)二維數(shù)組中返回一維數(shù)組并配合驗(yàn)證規(guī)則實(shí)現(xiàn)分類(lèi)數(shù)據(jù)過(guò)濾。 1、不通過(guò)日志獲取AR執(zhí)行的原生SQL語(yǔ)句和打印變量數(shù)據(jù) $query = User::find() ->select([username])->where([id=>[1,2,3...
摘要:繼控制器與視圖交互,本篇將講解如何自定義全局函數(shù),以及使用自帶的用戶注冊(cè)登錄功能全局函數(shù)有時(shí)候我們希望自定義一些函數(shù),可以在全局中調(diào)用,如默認(rèn)的在頁(yè)面上的顯示效果并不好,尤其是多層級(jí)數(shù)組的情況下,一大坨數(shù)據(jù)很難分辨。 繼控制器與視圖交互,本篇將講解如何自定義全局函數(shù),以及使用yii自帶的用戶注冊(cè)登錄功能 全局函數(shù) 有時(shí)候我們希望自定義一些函數(shù),可以在全局中調(diào)用,如php默認(rèn)的var_d...
摘要:我們有時(shí)會(huì)碰到一個(gè)場(chǎng)景,比如買(mǎi)車(chē)票,需要進(jìn)行查詢車(chē)票剩余,這時(shí)候需要一個(gè)日期范圍,開(kāi)始日期必須大于等于今天,結(jié)束日期必須大于等于開(kāi)始日期。通過(guò)增加一個(gè)額外的字段,然后通過(guò)這個(gè)字段限制范圍。測(cè)試發(fā)現(xiàn)實(shí)際并不生效。 我們有時(shí)會(huì)碰到一個(gè)場(chǎng)景,比如買(mǎi)車(chē)票,需要進(jìn)行查詢車(chē)票剩余,這時(shí)候需要一個(gè)日期范圍,開(kāi)始日期必須大于等于今天,結(jié)束日期必須大于等于開(kāi)始日期。 Version Laravel 5...
摘要:文章轉(zhuǎn)自視頻教程優(yōu)雅的應(yīng)用調(diào)試工具新擴(kuò)展是由和開(kāi)源的應(yīng)用的調(diào)試工具。計(jì)劃任務(wù)列出已運(yùn)行的計(jì)劃任務(wù)。該封閉函數(shù)會(huì)被序列化為一個(gè)長(zhǎng)字符串,加上他的哈希與簽名如出一轍該功能將記錄所有異常,并可查看具體異常情況。事件顯示所有事件的列表。 文章轉(zhuǎn)自:https://laravel-china.org/topics/19013視頻教程:047. 優(yōu)雅的應(yīng)用調(diào)試工具--laravel/telesco...
閱讀 1917·2021-11-25 09:43
閱讀 1423·2021-11-22 14:56
閱讀 3288·2021-11-22 09:34
閱讀 2027·2021-11-15 11:37
閱讀 2282·2021-09-01 10:46
閱讀 1408·2019-08-30 15:44
閱讀 2304·2019-08-30 13:15
閱讀 2403·2019-08-29 13:07