首頁 後端開發 php教程 【PHP】将“变量”转换为”可以引入的文件“以及 错误的使用

【PHP】将“变量”转换为”可以引入的文件“以及 错误的使用

Jun 13, 2016 am 10:58 AM
array exception quot str var

【PHP】将“变量”转换为”可以引入的文件“以及 异常的使用

槽吐吐,最近在看一本叫《代码简洁之道》的书,书中讲了如何让自己的代码变得容易读懂,受益匪浅。有兴趣的朋友可以看看。

PHPer很少使用异常,即时是公司里的大牛,也不见得会使用异常。更多情况下,异常仅仅被当作error code的另外一个实现体而已。我记得我在前面的博客里还说到过异常,貌似木有人支持啊。

想象一下:一个代码里出现了如下情况:

<?phpif (($retCode = fun1()) == 0){	$html = "Hello,world";	if(($retCode = fun2()) == 0){		if(($retCode = fun3()) == 0){		}else{			//出错了		}	}else{	//出错了	}}else{//出错了}
登入後複製

上面的代码,熟悉么?之前看discuz的源码时,有一段代码有类似的结构,这样写,代价确实很大,尤其是后面的人来读这段代码的时候。我们确实没有重构的习惯,使用异常重构,可以很好解决这个问题

<?phptry {	fun1();	fun2();	fun3();}catch(Exception_FUNC_1 $e){	//错误处理}catch(Exception_FUNC_2 $e){	//错误处理}catch(Exception_FUNC_3 $e){	//错误处理}
登入後複製

是不是好点?还可以再优化么?

<?phptry {	fun1();	fun2();	fun3();}catch(Exception $e){	echo $e->getMessage();}function fun1(){	throw new Exception("Your input is empty", 10001);}
登入後複製

好处是什么?

1. 你可以专注与正常的流程,而不用关心出错了会怎么办

2. 将错误的部分统一处理,返回错误、日志、回溯

3. 随意增加错误类型,因为本身是自定义,你不用维护一套error code

4. 代码结构清晰,维护代价低

5. 特有的类维护自己的异常,如:smarty、phpunit,出错了有自己的记录方式,与所处的系统无耦合

看个人习惯,我个人极力推荐


有这么一个需求:

我想将一个变量(可能为数组、字符串、数字),可以输出到文件里,使这个文件被别的php文件include后,使用这个变量,即:

<?php $a = array(	0 => 'abc',	1 => array(		'abc' => '2345'	));//输出到文件的内容是:{	return array(		0 => 'abc',		1 => array(			'abc' => '2345'		)	);}
登入後複製

然后,下一个文件include后是:

$a = include("file.php");
登入後複製

它就拥有了这个数据了。

具体什么场合下用到,我们将内存中的数据放到硬盘中,除了serialize外,这也是一种方便的做法,因为不需要unserialize。不好的一点是:没法对对象、句柄做操作。

我是这么写的:

<?phpclass Code{	/**	 * 将变量转化为字符串	 *	 * @param mixed $var 仅包含字符串、数字、数组的变量	 * @param string $pfx 前缀,输出的内容容易被读	 *	 * @return string	 */    public function var2Str($var, $pfx = ''){        $str = '';        if(is_array($var)){            $str = "array(\n";            $pfx .= "\t";            foreach($var as $k => $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;    }}
登入後複製

可以试试~
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java中的ConcurrentModificationException異常的產生原因和解決方法 Java中的ConcurrentModificationException異常的產生原因和解決方法 Jun 25, 2023 am 10:33 AM

在Java中,當多個執行緒同時操作一個集合物件時,有可能會發生ConcurrentModificationException異常,該異常通常發生在遍歷集合時進行修改或刪除元素的操作,這會導致集合的狀態出現不一致,從而拋出異常。本文將深入探討此異常的產生原因和解決方法。一、異常產生原因通常情況下,ConcurrentModificationException異

使用C#中的Array.Sort函數對陣列進行排序 使用C#中的Array.Sort函數對陣列進行排序 Nov 18, 2023 am 10:37 AM

標題:C#中使用Array.Sort函數對陣列進行排序的範例正文:在C#中,陣列是一種常用的資料結構,經常需要對陣列進行排序運算。 C#提供了Array類,其中有Sort方法可以方便地對陣列進行排序。本文將示範如何使用C#中的Array.Sort函數對陣列進行排序,並提供具體的程式碼範例。首先,我們要先了解Array.Sort函數的基本用法。 Array.So

如何使用PHP中的array_combine函數將兩個陣列拼成關聯數組 如何使用PHP中的array_combine函數將兩個陣列拼成關聯數組 Jun 26, 2023 pm 01:41 PM

在PHP中,有許多強大的陣列函數可以讓陣列的操作更加方便和快速。當我們需要將兩個陣列拼成一個關聯數組時,可以使用PHP的array_combine函數來實現這一操作。這個函數其實是用來將一個陣列的鍵當作另一個陣列的值,合併成一個新的關聯數組。接下來,我們將會講解如何使用PHP中的array_combine函數將兩個陣列拼成關聯數組。了解array_comb

一起聊聊var、let以及const的差異(程式碼範例) 一起聊聊var、let以及const的差異(程式碼範例) Jan 06, 2023 pm 04:25 PM

這篇文章為大家帶來了關於JavaScript的相關知識,其中主要為大家介紹了var、let以及const的區別有哪些,還有ECMAScript 和JavaScript的關係介紹,有興趣的朋友一起來看一下吧,希望對大家有幫助。

簡單明了的PHP array_merge_recursive()函式使用方法 簡單明了的PHP array_merge_recursive()函式使用方法 Jun 27, 2023 pm 01:48 PM

在進行PHP編程時,我們常常需要將數組合併。 PHP提供了array_merge()函數來完成數組合併的工作,但是當數組中存在相同的鍵時,函數會覆寫原來的值。為了解決這個問題,PHP在語言中還提供了一個array_merge_recursive()函數,該函數可以合併數組並保留相同鍵的值,使得程式的設計變得更加靈活。 array_merge

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

在 Windows 11 上修復音訊服務無回應問題的 18 種方法 在 Windows 11 上修復音訊服務無回應問題的 18 種方法 Jun 05, 2023 pm 10:23 PM

音訊輸出和輸入需要特定的驅動程式和服務才能在Windows11上按預期工作。這些有時最終會在後台遇到錯誤,從而導致音訊問題,如無音訊輸出、缺少音訊設備、音訊失真等。如何修復在Windows11上沒有回應的音訊服務我們建議您從下面提到的修復開始,並逐步完成列表,直到您設法解決您的問題。由於Windows11上的多種原因,音訊服務可能無法回應。此清單將幫助您驗證和修復阻止音訊服務在Windows11上回應的大多數問題。請按照以下相關部分幫助您完成流程。方法一:重啟音訊服務您可能會遇

PHP Fatal error: Uncaught exception 'PDOException'的解決方法 PHP Fatal error: Uncaught exception 'PDOException'的解決方法 Jun 23, 2023 pm 12:09 PM

在PHP開發中,可能會遇到「PHPFatalerror:Uncaughtexception‘PDOException’」這樣的錯誤,這是由於PHP操作資料庫的時候出現了錯誤所引發的異常。如果不及時處理這個錯誤,就會導致程式中斷或出現無法預期的錯誤。那麼如何解決這個問題呢?以下是一些常見的解決方法。一、檢查資料庫參數首先,我們需要檢查連接資料庫時傳

See all articles