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写的MySQL数据库用户认证系统代码
Mar 22 PHP
php fckeditor 调用的函数
Jun 21 PHP
浅析php面向对象public private protected 访问修饰符
Jun 30 PHP
5种PHP创建数组的实例代码分享
Jan 17 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
Nov 16 PHP
PHP实现发送邮件的方法(基于简单邮件发送类)
Dec 17 PHP
Symfony2安装的方法(2种方法)
Feb 04 PHP
PHP数组函数知识汇总
May 12 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
Apr 04 PHP
使用Zookeeper分布式部署PHP应用程序
Mar 15 PHP
php依赖注入知识点详解
Sep 23 PHP
PHP序列化和反序列化深度剖析实例讲解
Dec 29 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
PHP程序员最常犯的11个MySQL错误小结
2010/11/20 PHP
php 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
初识PHP中的Swoole
2016/04/05 PHP
PHP实现QQ登录的开原理和实现过程
2018/02/04 PHP
DEFER怎么用?
2006/07/01 Javascript
理解Javascript_14_函数形式参数与arguments
2010/10/20 Javascript
javascript解析json数据的3种方式
2014/05/08 Javascript
使用AngularJS实现表单向导的方法
2015/06/19 Javascript
JS日期格式化之javascript Date format
2015/10/01 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
2015/11/15 Javascript
javascript 秒表计时器实现代码
2017/03/09 Javascript
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
2017/06/09 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
2017/10/10 Javascript
详解webpack 入门与解析
2018/04/09 Javascript
JavaScript, select标签元素左右移动功能实现
2020/05/14 Javascript
深入了解Vue3模板编译原理
2020/11/19 Vue.js
压缩包密码破解示例分享(类似典破解)
2014/01/17 Python
python缩进区别分析
2014/02/15 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
2017/03/16 Python
python实现对指定输入的字符串逆序输出的6种方法
2018/04/26 Python
Python实现注册、登录小程序功能
2018/09/21 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
2020/04/17 Python
python如何输出反斜杠
2020/06/18 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
2020/08/27 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
Python抖音快手代码舞(字符舞)的实现方法
2021/02/07 Python
英国打印机墨水和碳粉商店:Printerinks
2017/06/30 全球购物
2014小学生国庆65周年演讲稿
2014/09/21 职场文书
个人对照检查剖析材料
2014/10/13 职场文书
2014年高中教师工作总结
2014/12/19 职场文书
永不妥协观后感
2015/06/10 职场文书
病房管理制度范本
2015/08/06 职场文书
2016年大学校运会广播稿件
2015/12/21 职场文书
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
2021/03/31 jQuery
Nginx 常用配置
2022/05/15 Servers