【PHP】將“變數”轉換為”可以引入的檔案“以及 異常的使用
槽吐吐,最近在看一本叫《代碼簡潔之道》的書,書中講了如何讓自己的代碼變得容易讀懂,受益匪淺。有興趣的朋友可以看看。
PHPer很少使用異常,即時是公司裡的大牛,也不見得會使用異常。更多情況下,異常僅僅被當作error code的另外一個實現體而已。我記得我在前面的部落格裡還說到過異常,貌似木有人支援啊。
想象一下:一個代碼裡出現了如下情況:
上面的代碼,熟悉嗎?之前看discuz的源碼時,有一段代碼有類似的結構,這樣寫,代價確實很大,尤其是後面的人來讀這段代碼的時候。我們確實沒有重構的習慣,使用異常重構,可以很好解決這個問題
是不是好點?還可以再最佳化嗎?getMessage();}function fun1(){throw new Exception("Your input is empty", 10001);}
好處是什嗎?1. 你可以專註與正常的流程,而不用關心出錯了會怎麼辦
2. 將錯誤的部分統一處理,返回錯誤、日誌、回溯
3. 隨意增加錯誤類型,因為本身是自訂,你不用維護一套error code
4. 代碼結構清晰,維護代價低
5. 特有的類維護自己的異常,如:smarty、phpunit,出錯了有自己的記錄方式,與所處的系統無耦合
看個人習慣,我個人極力推薦
有這麼一個需求:
我想將一個變數(可能為數組、字串、數字),可以輸出到檔案裡,使這個檔案被別的php檔案include後,使用這個變數,即:
'abc',1 => array('abc' => '2345'));//輸出到檔案的內容是:{return array(0 => 'abc',1 => array('abc' => '2345'));}
然後,下一個檔案include後是:$a = include("file.php");
它就擁有了這個資料了。具體什麼場合下用到,我們將記憶體中的資料放到硬碟中,除了serialize外,這也是一種方便的做法,因為不需要unserialize。不好的一點是:沒法對對象、控制代碼做操作。
我是這麼寫的:
$v){ if(is_string($k)){ $k = "\"{$k}\""; } $str .= $pfx . "{$k} => " . $this->var2Str($v, $pfx) . ",\n"; } $str .= $pfx . ")"; }elseif(is_int($var) || is_float($var)){ $str = "{$var}"; }elseif(is_string($var)){ $str = "\"{$var}\""; } return $str; }}
可以試試~