提高 PHP 代码质量的 36 计Word格式.docx
- 文档编号:15957794
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:20
- 大小:27.34KB
提高 PHP 代码质量的 36 计Word格式.docx
《提高 PHP 代码质量的 36 计Word格式.docx》由会员分享,可在线阅读,更多相关《提高 PHP 代码质量的 36 计Word格式.docx(20页珍藏版)》请在冰豆网上搜索。
/restofthecode现在,无论你移到哪个目录,如移到一个外网的服务器上,代码无须更改便可正确运行.2.不要直接使用require,include,include_once,required_once可以在脚本头部引入多个文件,像类库,工具文件和助手函数等,如:
require_once(lib/Database.php);
require_once(lib/Mail.php);
require_once(helpers/utitlity_functions.php);
这种用法相当原始.应该更灵活点.应编写个助手函数包含文件.例如:
functionload_class($class_name)/pathtotheclassfile$path=ROOT./lib/.$class_name.php);
require_once($path);
load_class(Database);
load_class(Mail);
有什么不一样吗?
该代码更具可读性.將来你可以按需扩展该函数,如:
if(file_exists($path)require_once($path);
还可做得更多:
为同样文件查找多个目录能很容易的改变放置类文件的目录,无须在代码各处一一修改可使用类似的函数加载文件,如html内容.3.为应用保留调试代码在开发环境中,我们打印数据库查询语句,转存有问题的变量值,而一旦问题解决,我们注释或删除它们.然而更好的做法是保留调试代码.在开发环境中,你可以:
define(ENVIRONMENT,development);
if(!
$db-query($query)if(ENVIRONMENT=development)echo$queryfailed;
elseechoDatabaseerror.Pleasecontactadministrator;
在服务器中,你可以:
define(ENVIRONMENT,production);
4.使用可跨平台的函数执行命令system,exec,passthru,shell_exec这4个函数可用于执行系统命令.每个的行为都有细微差别.问题在于,当在共享主机中,某些函数可能被选择性的禁用.大多数新手趋于每次首先检查哪个函数可用,然而再使用它.更好的方案是封成函数一个可跨平台的函数./*MethodtoexecuteacommandintheterminalUses:
1.system2.passthru3.exec4.shell_exec*/functionterminal($command)/systemif(function_exists(system)ob_start();
system($command,$return_var);
$output=ob_get_contents();
ob_end_clean();
/passthruelseif(function_exists(passthru)ob_start();
passthru($command,$return_var);
/execelseif(function_exists(exec)exec($command,$output,$return_var);
$output=implode(n,$output);
/shell_execelseif(function_exists(shell_exec)$output=shell_exec($command);
else$output=Commandexecutionnotpossibleonthissystem;
$return_var=1;
returnarray(output=$output,status=$return_var);
terminal(ls);
上面的函数將运行shell命令,只要有一个系统函数可用,这保持了代码的一致性.5.灵活编写函数functionadd_to_cart($item_id,$qty)$_SESSIONcartitem_id=$qty;
add_to_cart(IPHONE3,2);
使用上面的函数添加单个项目.而当添加项列表的时候,你要创建另一个函数吗?
不用,只要稍加留意不同类型的参数,就会更灵活.如:
functionadd_to_cart($item_id,$qty)if(!
is_array($item_id)$_SESSIONcartitem_id=$qty;
elseforeach($item_idas$i_id=$qty)$_SESSIONcarti_id=$qty;
add_to_cart(array(IPHONE3=2,IPAD=5);
现在,同个函数可以处理不同类型的输入参数了.可以参照上面的例子重构你的多处代码,使其更智能.6.有意忽略php关闭标签我很想知道为什么这么多关于php建议的博客文章都没提到这点.?
phpechoHello;
/Nowdontclosethistag这將节约你很多时间.我们举个例子:
一个super_class.php文件/superextracharacteraftertheclosingtagindex.phprequire_once(super_class.php);
/echoanimageorpdf,orsetthecookiesorsessiondata这样,你將会得到一个Headersalreadysenderror.为什么?
因为“superextracharacter”已经被输出了.现在你得开始调试啦.这会花费大量时间寻找superextra的位置.因此,养成省略关闭符的习惯:
!
-?
phpclasssuper_classfunctionsuper_function()/supercode/Noclosingtag这会更好.7.在某地方收集所有输入,一次输出给浏览器这称为输出缓冲,假如说你已在不同的函数输出内容:
functionprint_header()echoSiteLogandLoginlinks;
functionprint_footer()echoSitewasmadebyme;
print_header();
for($i=0;
$i;
print_footer();
替代方案,在某地方集中收集输出.你可以存储在函数的局部变量中,也可以使用ob_start和ob_end_clean.如下:
functionprint_header()$o=SiteLogandLoginlinks;
return$o;
functionprint_footer()$o=Sitewasmadebyme;
echoprint_header();
echoprint_footer();
为什么需要输出缓冲:
可以在发送给浏览器前更改输出.如str_replaces函数或可能是preg_replaces或添加些监控/调试的html内容.输出给浏览器的同时又做php的处理很糟糕.你应该看到过有些站点的侧边栏或中间出现错误信息.知道为什么会发生吗?
因为处理和输出混合了.8.发送正确的mime类型头信息,如果输出非html内容的话.输出一些xml.$xml=;
$xml=0;
/Sendxmldataecho$xml;
工作得不错.但需要一些改进.$xml=;
/Sendxmldataheader(content-type:
text/xml);
echo$xml;
注意header行.该行告知浏览器发送的是xml类型的内容.所以浏览器能正确的处理.很多的javascript库也依赖头信息.类似的有javascript,css,jpgimage,pngimage:
JavaScriptheader(content-type:
application/x-javascript);
echovara=10;
CSSheader(content-type:
text/css);
echo#dividbackground:
#000;
9.为mysql连接设置正确的字符编码曾经遇到过在mysql表中设置了unicode/utf-8编码,phpadmin也能正确显示,但当你获取内容并在页面输出的时候,会出现乱码.这里的问题出在mysql连接的字符编码./Attempttoconnecttodatabase$c=mysqli_connect($this-host,$this-username,$this-password);
/Checkconnectionvalidityif(!
$c)die(Couldnotconnecttothedatabasehost:
.mysqli_connect_error();
/Setthecharactersetoftheconnectionif(!
mysqli_set_charset($c,UTF8)die(mysqli_set_charset()failed);
一旦连接数据库,最好设置连接的characterset.你的应用如果要支持多语言,这么做是必须的.10.使用htmlentities设置正确的编码选项php5.4前,字符的默认编码是ISO-8859-1,不能直接输出如等.$value=htmlentities($this-value,ENT_QUOTES,CHARSET);
php5.4以后,默认编码为UTF-8,这將解决很多问题.但如果你的应用是多语言的,仍然要留意编码问题,.11.不要在应用中使用gzip压缩输出,让apache处理考虑过使用ob_gzhandler吗?
不要那样做.毫无意义.php只应用来编写应用.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 提高 PHP 代码质量的 36 代码 质量