Rumah > pembangunan bahagian belakang > tutorial php > 【PHP】将“变量”转换为”可以引入的文件“以及 错误的使用

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

WBOY
Lepaskan: 2016-06-13 10:58:26
asal
795 orang telah melayarinya

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

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

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

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

<?phpif (($retCode = fun1()) == 0){	$html = "Hello,world";	if(($retCode = fun2()) == 0){		if(($retCode = fun3()) == 0){		}else{			//出错了		}	}else{	//出错了	}}else{//出错了}
Salin selepas log masuk

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

<?phptry {	fun1();	fun2();	fun3();}catch(Exception_FUNC_1 $e){	//错误处理}catch(Exception_FUNC_2 $e){	//错误处理}catch(Exception_FUNC_3 $e){	//错误处理}
Salin selepas log masuk

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

<?phptry {	fun1();	fun2();	fun3();}catch(Exception $e){	echo $e->getMessage();}function fun1(){	throw new Exception("Your input is empty", 10001);}
Salin selepas log masuk

好处是什么?

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'		)	);}
Salin selepas log masuk

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

$a = include("file.php");
Salin selepas log masuk

它就拥有了这个数据了。

具体什么场合下用到,我们将内存中的数据放到硬盘中,除了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;    }}
Salin selepas log masuk

可以试试~
Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan