PHP 高手之路(二)


Posted in PHP onOctober 09, 2006

二、编写漂亮的代码
  1.将后台程序与前端程序分开
  在编写PHP程序时,有些代码是用来处理一些事务,例如操作数据库、进行数学运算等,而另外的一些代码则只是事务处理的结果显示出来,例如一些使用echo语句将结果以HTML的格式显示在Web浏览器上的PHP代码以及那些直接嵌入PHP程序的HTML代码。首先我们应该清晰地区分这两种代码,把前者称为后台程序,把后者称为前端程序。
  因为PHP是一种嵌入式编程语言,也就是说,所有的PHP代码都可以嵌入到HTML代码之中,这为程序的编写带来了许多便利之处。但是,“物极必反”,如果在一段较长的程序中将PHP代码和HTML代码混合编写,这将使程序杂乱无章,不利于程序的维护和阅读。所以我们需要尽可能地将这些程序中混杂于HTML代码中的PHP代码移植出来,在专门的文件中将这些代码封装成函数,然后在HTML代码中使用include语句来包含这些文件,在适当的位置调用这些函数即可。
  这种做法一方面使HTML代码和PHP代码都简单易读,另一方面因为HTML代码需要不断更新,而这种分离的方法可以确保后台程序不会被破坏。
  同前端程序不同,后台程序更多追求的是稳定、结构化,极少更改,所以应该认真地设计和管理。其实,在设计台程序时,投入大量时间是值得的,“现在栽树,以后乘凉”,在以后的设计工作中将可以轻松地使用现在编写的后台程序。
  2.灵活使用包含文件
  正如前面所说的那样,后台程序应当安排在一系列的包含文件中。包含文件可以通过include语句在需要时动态装入,也可以在php.ini文件中通过使用auto_prepend_file指令预先自动装入。
  如果使用后一种方法的话,虽然取得了一劳永逸的好处,但是也有一些缺点值得我们注意。下面的一段代码向我们展示了解析一个庞大的包含文件需要一定的时间:
    require(timing.inc);
  ss_timing_start();
  include(test.inc);
  ss_timing_stop();
  echo
.ss_timing_current().

  ?>
  在上面的代码中,test.inc是一个1000行的包含文件,运行的结果显示,解析这个包含文件花费了0.6秒钟,对于一个大型网站来说,这个速度并不是可以忽略不记的。
  使用包含文件的另外一个缺点是:如果一个文件中的一个语句发生错误,将会使整个网站的PHP程序都无法运行。所以使用起来也及其小心。
  其实,对包含文件稍做处理,即可以使包含文件只在需要时进行解析。下面的代码使abc.inc文件只在程序需要时才作解析:
    if ( defined( __LIBA_INC) ) return;
  define( __LIBA_INC, 1 );
  /*
  * 代码...
  */
  ?>
  3.使用面向对象的编程方法
  PHP也是一种面向对象的语言,面向对象的编程方法是优秀的程序员们非常推崇的一种软件设计方法,在PHP编程中可以充分发挥面向对象语言的优势,对编程中的对象进行封装。在前面的代码中,我们使用了面向对象的方法,例如在管理数据库时,我们将query()函数封装进数据库类中,这极大地方便了代码的管理,增加了程序的可读性。
  三、追求程序速度,而不是编程的速度
  在网站建设中,程序运行速度和网页下载速度都是关系成败的重要因素。作为一名Web程序员,应该更加注意代码的运行速度。下面介绍的几种方法都在不同程度上提高了代码的运行速度。
  1.使用内嵌的HTML代码,而不是PHP的echo语句。
  因为PHP是一门嵌入式Web编程语言,可以将HTML代码和PHP代码相互嵌入。但是很多程序员担心在HTML代码中过多的使用""嵌入PHP代码会多次调用PHP解释器,从而降低了PHP代码的运行速度,所以宁愿使用PHP的echo语句来输出HTML代码,而不直接使用HTML代码。但事实却恰恰相反。每一个PHP页面只调用一次PHP解释器来解释所有的PHP代码,所以,只在需要时才嵌入PHP代码,而大多数的时候直接使用HTML代码输入结果,不但不会降低程序的运行速度,而且因为减少了对echo语句的解析,往往可以提高代码的运行速度。
  下面的一段代码证明了我们的结论。在这段代码中,我们使用了前面介绍的时间测试函数。

  

PHP 相关文章推荐
十天学会php之第七天
Oct 09 PHP
使用php4加速网络传输
Oct 09 PHP
PHP+MYSQL 出现乱码的解决方法
Aug 08 PHP
PHP 抓取新浪读书频道的小说并生成txt电子书的代码
Dec 18 PHP
PHP 循环删除无限分类子节点的实现代码
Jun 21 PHP
php获得url参数中具有&的值的方法
Mar 05 PHP
PHP生成树的方法
Jul 28 PHP
PHP保存session到memcache服务器的方法
Jan 19 PHP
Yii使用smsto短信接口的函数demo示例
Jul 13 PHP
php array_merge_recursive 数组合并
Oct 26 PHP
Laravel框架实现利用监听器进行sql语句记录功能
Jun 06 PHP
php定期拉取数据对比方法实例
Sep 22 PHP
PHP 高手之路(三)
Oct 09 #PHP
php&java(二)
Oct 09 #PHP
php&java(一)
Oct 09 #PHP
php&java(三)
Oct 09 #PHP
一个用于mysql的数据库抽象层函数库
Oct 09 #PHP
教你如何把一篇文章按要求分段
Oct 09 #PHP
全文搜索和替换
Oct 09 #PHP
You might like
Yii结合CKEditor实现图片上传功能
2014/06/13 PHP
Laravel 5框架学习之表单
2015/04/08 PHP
PHP+shell实现多线程的方法
2015/07/01 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
2016/10/08 PHP
PHP数据库编程之MySQL优化策略概述
2017/08/16 PHP
详解jquery uploadify 上传文件
2013/11/09 Javascript
javascript实现瀑布流加载图片原理
2016/02/02 Javascript
Node.js实现文件上传
2016/07/05 Javascript
浅谈jQuery绑定事件会叠加的解决方法和心得总结
2016/10/26 Javascript
ionic环境配置及问题详解
2017/06/27 Javascript
JavaScript实现三级联动菜单效果
2017/08/16 Javascript
JS实现的找零张数最小问题示例
2017/11/28 Javascript
Bootstrap Table 双击、单击行获取该行及全表内容
2018/08/31 Javascript
vue动态注册组件实例代码详解
2019/05/30 Javascript
js实现菜单跳转效果
2020/12/11 Javascript
python 解析XML python模块xml.dom解析xml实例代码
2014/02/07 Python
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
通过数据库向Django模型添加字段的示例
2015/07/21 Python
python中子类继承父类的__init__方法实例
2016/12/15 Python
python实现感知器算法详解
2017/12/19 Python
在 Linux/Mac 下为Python函数添加超时时间的方法
2020/02/20 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
python实现人脸签到系统
2020/04/13 Python
HTML5地理定位_动力节点Java学院整理
2017/07/12 HTML / CSS
美国知名艺术画网站:Art.com
2017/02/09 全球购物
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
2015/07/16 面试题
学生的自我鉴定范文
2013/10/24 职场文书
物流专业大学生求职信范文
2013/10/28 职场文书
应届生自我鉴定
2013/12/11 职场文书
房地产销售计划书
2014/01/10 职场文书
报关报检委托书
2014/04/08 职场文书
党员民主评议自我评价
2014/10/20 职场文书
群众路线教育实践活动学习心得体会
2014/10/30 职场文书
高中家长意见怎么写
2015/06/03 职场文书
2019年教师节:送给所有老师的祝福语
2019/09/05 职场文书
Android中View.post和Handler.post的关系
2022/06/05 Java/Android