找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2296|回复: 0

[教程] PHP应用程序架构浅谈

[复制链接]
发表于 2013-4-13 21:05:57 | 显示全部楼层 |阅读模式 来自 中国–广东–湛江
  1. 虽然名字叫《PHP最佳实践》,但是它主要谈的不是编程规则,而是PHP应用程序的合理架构。
  2.   它提供了一种逻辑和数据分离的架构模式,属于MVC模式的一种实践。我觉得,这是很有参考价值的学习资料,类似的文章网上并不多,所以一边学习,一边就把它翻译了出来。
  3.   根据自己的理解,我总结了它的MVC模式的实现方式(详细解释见译文):
  4.   * 视图层(View):前端网页;
  5.   * 逻辑层(Controller):先是页逻辑(Page Controller),负责处理页面请求;然后,调用业务逻辑(Business  Controller),实现具体功能;
  6.   * 数据层(Model):数据保存在数据库之中,上面有一个数据库抽象层,再上面则是一个'数据访问对象'(DAO),它生成'值对象'(Value  Object)。业务逻辑通过DAO,操作值对象。
  7.   =======================================
  8.   PHP最佳实践
  9.   
  10.   
  11.   本文给出了PHP程序设计常见问题的解决方法,同时简单描述了PHP应用程序的架构。
  12.   1. php.ini设置
  13.   php.ini控制了解释器的行为,下面的一些设置保证了你的程序有最大的可移植性。
  14.   i. short_open_tag
  15.   设为0,即永远使用PHP的长标签形式:,不用短标签形式。
  16.   ii. asp_tags
  17.   设为0,不使用ASP标签。
  18.   iii. magic_quotes_gpc
  19.   建议在脚本中包含一个全局文件,负责在读取$_GET、$_POST、$_COOKIE变量之前,首先检查这个设置是否打开,如果打开了,这对这些变量应用stripslashes函数。(注:该设置已经在PHP  5.3中被废除。)
  20.   iv. register_globals
  21.   不要依赖这个设置,永远通过全局变量$_GET、$_POST、$_COOKIE去读取GET、POST和COOKIE的值。为了方便起见,建议声明$PHP_SELF  = $_SERVER['PHP_SELF']。
  22.   v. file_uploads
  23.   上传文件的最大大小,由下面的设置决定:
  24.   * file_uploads必须设为1(默认值),表示允许上传。
  25.   * memory_limit必须略大于post_max_size和upload_max_filesize。
  26.   * post_max_size和upload_max_filesize要足够大,能满足上传的需要。
  27.   2. 配置文件(configuration file)
  28.   你应该把与应用程序相关的所有配置,写在一个文件里。这样你就能很方便地适应开发环境的变化。配置文件通常包含以下信息:数据库参数、email地址、各类选项、debug和logging输出开关、应用程序常数。
  29.   3. 名称空间(namespace)
  30.   选择类和函数名的时候,必须很小心,避免出现重名。尽可能不要在类以外,放置全局性函数,类对内部的属性和方法,相当于有一层名称空间保护。如果你确实有必要声明全局性函数,那么使用一个前缀,比如dao_factory()、  db_getConnection()、text_parseDate()等等。
  31.   4. 数据库抽象层
  32.   PHP不提供数据库操作的通用函数,每种数据库都有一套自己的函数。你不应该直接使用这些函数,否则一旦改用其他数据库(比如从MySQL  转为Oracle),你就有大麻烦了。而且,数据库抽象层通常比系统本身的数据库函数,更易用一些。
  33.   5. '值对象'(Value Object, VO)
  34.   值对象(VO)在形式上,就像C语言的struct结构。它是一个只包含属性、不包含任何方法(或只包含很少方法)的类。一个值对象,就对应一个实体。它的属性,通常应该与数据库的字段名保持相同。此外,还应该有一个ID属性。
  35.   class Person {
  36.   var $id, $first_name, $last_name, $email;
  37.   }
  38.   6. 数据访问对象(Data Access Object, DAO)
  39.   数据访问对象(DAO)的作用,主要是将数据库访问与其他代码相隔离。DAO应该是可以叠加(stacked)的,这样就有利于将来你再添加数据库缓存。每一个值对象的类,都应该有自己的DAO。
  40.   class PersonDAO {
  41.   var $conn;
  42.   function PersonDAO(&$conn) {
  43.   $this->conn =& $conn;
  44.   }
  45.   function save(&$vo) {
  46.   if ($v->id == 0) {
  47.   $this->insert($vo);
  48.   } else {
  49.   $this->update($vo);
  50.   }
  51.   }
  52.   function get($id) {
  53.   #execute select statement
  54.   #create new vo and call getFromResult
  55.   #return vo
  56.   }
  57.   function delete(&$vo) {
  58.   #execute delete statement
  59.   #set id on vo to 0
  60.   }
  61.   #-- private functions
  62.   function getFromResult(&vo, $result) {
  63.   #fill vo from the database result set
  64.   }
  65.   function update(&$vo) {
  66.   #execute update statement here
  67.   }
  68.   function insert(&$vo) {
  69.   #generate id (from Oracle sequence or automatically)
  70.   #insert record into db
  71.   #set id on vo
  72.   }
  73.   }
复制代码

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-12-23 03:29 , Processed in 0.039826 second(s), 9 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表