【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; }}
可以试试~

在Java中,当多个线程同时操作一个集合对象时,有可能会发生ConcurrentModificationException异常,该异常通常发生在遍历集合时进行修改或者删除元素的操作,这会导致集合的状态出现不一致,从而抛出异常。本文将深入探讨该异常的产生原因和解决方法。一、异常产生原因通常情况下,ConcurrentModificationException异

标题:C#中使用Array.Sort函数对数组进行排序的示例正文:在C#中,数组是一种常用的数据结构,经常需要对数组进行排序操作。C#提供了Array类,其中有Sort方法可以方便地对数组进行排序。本文将演示如何使用C#中的Array.Sort函数对数组进行排序,并提供具体的代码示例。首先,我们需要了解一下Array.Sort函数的基本用法。Array.So

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

在进行PHP编程时,我们常常需要对数组进行合并。PHP提供了array_merge()函数来完成数组合并的工作,不过当数组中存在相同的键时,该函数会覆盖原有的值。为了解决这个问题,PHP在语言中还提供了一个array_merge_recursive()函数,该函数可以合并数组并保留相同键的值,使得程序的设计变得更加灵活。array_merge

音频输出和输入需要特定的驱动程序和服务才能在Windows11上按预期工作。这些有时最终会在后台遇到错误,从而导致音频问题,如无音频输出、缺少音频设备、音频失真等。如何修复在Windows11上没有响应的音频服务我们建议您从下面提到的修复开始,并逐步完成列表,直到您设法解决您的问题。由于Windows11上的多种原因,音频服务可能无法响应。此列表将帮助您验证和修复阻止音频服务在Windows11上响应的大多数问题。请按照以下相关部分帮助您完成该过程。方法一:重启音频服务您可能会遇

本篇文章给大家带来了关于JavaScript的相关知识,其中主要给大家介绍了var、let以及const的区别有哪些,还有ECMAScript 和 JavaScript的关系介绍,感兴趣的朋友一起来看一下吧,希望对大家有帮助。

在PHP中,有许多强大的数组函数可以使数组的操作更加方便和快捷。当我们需要将两个数组拼成一个关联数组时,可以使用PHP的array_combine函数来实现这一操作。这个函数实际上是用来将一个数组的键作为另一个数组的值,合并成一个新的关联数组。接下来,我们将会讲解如何使用PHP中的array_combine函数将两个数组拼成关联数组。了解array_comb

PHP中var关键字的作用和示例在PHP中,var关键字用于声明一个变量。以前的PHP版本中,使用var关键字是声明成员变量的惯用方式,现在已经不再推荐使用。然而,在某些情况下,var关键字依然会被使用。var关键字主要用于声明一个局部变量,并且会自动将该变量标记为局部作用域。这意味着该变量仅在当前的代码块中可见,并且不能在其他函数或代码块中访问。使用var


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Dreamweaver CS6
視覺化網頁開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器