ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:27.34KB ,
资源ID:3046839      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3046839.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(提高 PHP 代码质量的 36 计.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

提高 PHP 代码质量的 36 计.docx

1、提高 PHP 代码质量的 36 计提高 PHP 代码质量的 36 计1.不要使用相对路径常常会看到:require_once(././lib/some_class.php);该方法有很多缺点:它首先查找指定的 php包含路径,然后查找当前目录.因此会检查过多路径.如果该脚本被另一目录的脚本包含,它的基本目录变成了另一脚本所在的目录.另一问题,当定时任务运行该脚本,它的上级目录可能就不是工作目录了.因此最佳选择是使用绝对路径:define(ROOT,/var/www/project/);require_once(ROOT././lib/some_class.php);/rest of the c

2、ode我们定义了一个绝对路径,值被写死了.我们还可以改进它.路径/var/www/project 也可能会改变,那么我们每次都要改变它吗?不是的,我们可以使用_FILE_常量,如:/suppose your script is/var/www/project/index.php/Then _FILE_ will always have that full path.define(ROOT,pathinfo(_FILE_,PATHINFO_DIRNAME);require_once(ROOT././lib/some_class.php);/rest of the code现在,无论你移到哪个目录

3、,如移到一个外网的服务器上,代码无须更改便可正确运行.2.不要直接使用 require,include,include_once,required_once可以在脚本头部引入多个文件,像类库,工具文件和助手函数等,如:require_once(lib/Database.php);require_once(lib/Mail.php);require_once(helpers/utitlity_functions.php);这种用法相当原始.应该更灵活点.应编写个助手函数包含文件.例如:function load_class($class_name)/path to the class file$

4、path=ROOT./lib/.$class_name.php);require_once($path);load_class(Database);load_class(Mail);有什么不一样吗?该代码更具可读性.將来你可以按需扩展该函数,如:function load_class($class_name)/path to the class file$path=ROOT./lib/.$class_name.php);if(file_exists($path)require_once($path);还可做得更多:为同样文件查找多个目录能很容易的改变放置类文件的目录,无须在代码各处一一修改可使

5、用类似的函数加载文件,如 html内容.3.为应用保留调试代码在开发环境中,我们打印数据库查询语句,转存有问题的变量值,而一旦问题解决,我们注释或删除它们.然而更好的做法是保留调试代码.在开发环境中,你可以:define(ENVIRONMENT,development);if(!$db-query($query)if(ENVIRONMENT=development)echo$query failed;else echo Database error.Please contact administrator;在服务器中,你可以:define(ENVIRONMENT,production);if(

6、!$db-query($query)if(ENVIRONMENT=development)echo$query failed;else echo Database error.Please contact administrator;4.使用可跨平台的函数执行命令system,exec,passthru,shell_exec 这 4个函数可用于执行系统命令.每个的行为都有细微差别.问题在于,当在共享主机中,某些函数可能被选择性的禁用.大多数新手趋于每次首先检查哪个函数可用,然而再使用它.更好的方案是封成函数一个可跨平台的函数./*Method to execute a command in t

7、he terminal Uses:1.system 2.passthru 3.exec 4.shell_exec*/function terminal($command)/system if(function_exists(system)ob_start();system($command,$return_var);$output=ob_get_contents();ob_end_clean();/passthru else if(function_exists(passthru)ob_start();passthru($command,$return_var);$output=ob_get_

8、contents();ob_end_clean();/exec else if(function_exists(exec)exec($command,$output,$return_var);$output=implode(n,$output);/shell_exec else if(function_exists(shell_exec)$output=shell_exec($command);else$output=Command execution not possible on this system;$return_var=1;return array(output=$output,s

9、tatus=$return_var);terminal(ls);上面的函数將运行 shell命令,只要有一个系统函数可用,这保持了代码的一致性.5.灵活编写函数function add_to_cart($item_id,$qty)$_SESSIONcartitem_id=$qty;add_to_cart(IPHONE3,2);使用上面的函数添加单个项目.而当添加项列表的时候,你要创建另一个函数吗?不用,只要稍加留意不同类型的参数,就会更灵活.如:function add_to_cart($item_id,$qty)if(!is_array($item_id)$_SESSIONcartitem_

10、id=$qty;else foreach($item_id as$i_id=$qty)$_SESSIONcarti_id=$qty;add_to_cart(IPHONE3,2);add_to_cart(array(IPHONE3=2,IPAD=5);现在,同个函数可以处理不同类型的输入参数了.可以参照上面的例子重构你的多处代码,使其更智能.6.有意忽略 php关闭标签我很想知道为什么这么多关于 php建议的博客文章都没提到这点.?phpecho Hello;/Now dont close this tag这將节约你很多时间.我们举个例子:一个 super_class.php 文件/super

11、extra character after the closing tagindex.phprequire_once(super_class.php);/echo an image or pdf,or set the cookies or session data这样,你將会得到一个 Headers already send error.为什么?因为“super extra character”已经被输出了.现在你得开始调试啦.这会花费大量时间寻找 super extra 的位置.因此,养成省略关闭符的习惯:!-?php class super_class function super_fun

12、ction()/super code/No closing tag这会更好.7.在某地方收集所有输入,一次输出给浏览器这称为输出缓冲,假如说你已在不同的函数输出内容:function print_header()echo Site Log and Login links;function print_footer()echo Site was made by me;print_header();for($i=0;$i;print_footer();替代方案,在某地方集中收集输出.你可以存储在函数的局部变量中,也可以使用ob_start和 ob_end_clean.如下:function pri

13、nt_header()$o=Site Log and Login links;return$o;function print_footer()$o=Site was made by me;return$o;echo print_header();for($i=0;$i;echo print_footer();为什么需要输出缓冲:可以在发送给浏览器前更改输出.如 str_replaces 函数或可能是 preg_replaces 或添加些监控/调试的 html内容.输出给浏览器的同时又做 php的处理很糟糕.你应该看到过有些站点的侧边栏或中间出现错误信息.知道为什么会发生吗?因为处理和输出混合了

14、.8.发送正确的 mime类型头信息,如果输出非 html内容的话.输出一些 xml.$xml=;$xml=0;/Send xml dataecho$xml;工作得不错.但需要一些改进.$xml=;$xml=0;/Send xml dataheader(content-type:text/xml);echo$xml;注意 header行.该行告知浏览器发送的是 xml类型的内容.所以浏览器能正确的处理.很多的 javascript库也依赖头信息.类似的有 javascript,css,jpg image,png image:JavaScriptheader(content-type:appli

15、cation/x-javascript);echo var a=10;CSSheader(content-type:text/css);echo#div id background:#000;9.为 mysql连接设置正确的字符编码曾经遇到过在 mysql表中设置了 unicode/utf-8编码,phpadmin也能正确显示,但当你获取内容并在页面输出的时候,会出现乱码.这里的问题出在 mysql连接的字符编码./Attempt to connect to database$c=mysqli_connect($this-host,$this-username,$this-password);

16、/Check connection validityif(!$c)die(Could not connect to the database host:.mysqli_connect_error();/Set the character set of the connectionif(!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只应用来编写应用.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1