免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5311 | 回复: 11

php程序框架及OO的一点看法 [复制链接]

论坛徽章:
0
发表于 2007-12-30 16:19 |显示全部楼层
从目前用到的最多的apache+php的搭配来讲,php和实质还是cgi。cgi就是程序或脚本设置环境变量&输入、加载、执行、输出、销毁。在这方面是与java web是截然不同的。

java web开发的核心是servlet和容器(jsp也被编译成servlet来运行),总的来说就是web程序员在实现servlet基类的子类,容器收到http请求后实例化servlet对象,负责管理servlet的创建运行销毁的整个生命过程。java的整个web是运行在一个进程空间内的(或jvm虚拟机),这样可以有很多方法提高系统运行效率,比如对象池,数据库连接池等。java里oo的应用是必然的。

php从形式上学习java那一套我认为是不可取的。一个http请求过来,php所有的对象都要从头读取加载创建,脚本结束后所有对象烟消云散。php解释执行的方式更不能跟JVM的JIT比较。

php的oo也不是一点没有用处。在php里,我认为oo主要用在功能性的包装上,比如adodb数据库对象,用户对象,复杂功能的form对象、html table对象等。

对应php整体框架来说,我个人认为更适合采用传统的过程方式,不要搞什么Application,Page对象。在使用顺序过程的方式的时候,要考虑几个重点问题。

1.一定要用单入口的方式,既面向用户只有一个index.php之类的单脚本。唯一入口从结构上可以集中处理url改写,任务分发,权限控制,防止恶意注入等(当然在不同页面里共同include一个集中处理的脚本也行,但那样失去了强制约束)。

2.OO里模块功能类和action方法转换为module目录和action文件。(这一点是我个人的习惯,不代表最佳方案)。用模块功能类(每一个模块功能写成一个类,分成若干action方法处理具体事务)的最大问题是:模块的规模不好控制。假设是一个论坛程序,我们会面临一系列抉择。显示子论坛,显示子论坛文章列表,显示内容,添加文章等功能,都需要划分若干类。从不同的视角,会产生不同的类的设计。有时候发现,虽然从逻辑上清晰合理了,但有的类几百行代码,有的类方法多有好几千行代码。单一代码多了可维护性降低,而且类中一个方法的语法错误,将导致整个类甚至程序的调用失败。
采用module目录和action文件的方式将解决(再说明:这不是电视里阿波罗活性肽的广告,只是适应我个人情况的方案)功能代码规模的问题。基本的url格式为:

index.php?module=mm1&action=show&xxx

入口合适权限后include module目录下的 module同名.php文件(相对于是类的构造函数,可以处理整个module的公共事务,网页的头部或网页的基本结构显示),然后 include module目录下的 {$action}.php。action文件可以是段php代码,也可以是嵌套php代码的html文件,这点很灵活。或是一段模板初始化代码,结尾处include 一个嵌套php代码的html模板(混合式的php本身就是最好的模板,为什么非一定要用smarty呢?)

3.权限。在基于第二点的情况下,权限就很好解决了。权限可以分为两种类型,一种是对应module和action的权限,一种是虚权限。对应module和action的权限完全是自动化的处理,在脚本或数据库里配置好后,由index.php入口自动判断处理(我个人目前实现了权限不够菜单和功能链接自动隐藏不显示)。对于action基本的粒度还不能满足的,使用虚的权限,直接通过if语句判断。

4.性能优化。php本身的运行方式和大量的include必然导致性能下降。针对php解释执行慢可以采用各种代码编译和加速的方式(eAccelerator,XCache等)。为了提供用户体验满意度,还可以采用ajax等技术。比如在index.php里直接输出含有ajax代码的静态主页面等。还可以借鉴smarty的“编译”方式,将页面里的include直接用include目标文件内容代替。当然这一变化是在index.php入口内部的处理,对用户透明不可见,不影响用户接口。

5.数据库对象

6.用户对象

未完待续。。。

任何应用框架必然带来的是某方面开发效率的提高和某方面灵活性的降低,挨砖是必然的,所以我也不敢发表什么框架。这里只是提出一些个人的心得和看法,偏颇也是必然的,愿与各位多交流促进。

论坛徽章:
0
发表于 2007-12-30 17:24 |显示全部楼层
java里oo的应用是必然的
这个是100%肯定的啦, java本身就是基于面向对象的,不oo难不成还要返古。
php的oo是半路出家的, 到处取经

论坛徽章:
0
发表于 2007-12-30 18:36 |显示全部楼层
可能OO是以后的趋势!

论坛徽章:
0
发表于 2007-12-30 18:49 |显示全部楼层
关于smarty的问题.我就被逼由自写模板类转为smarty.毕竟smarty是php中型到大型开发模板事实上的标准.


另: php+html 制作模板会导致致命的安全问题.况且你可以逼迫美工学习smarty,但是你无法逼迫美工学php.

论坛徽章:
0
发表于 2007-12-30 18:51 |显示全部楼层
原帖由 young1012 于 2007-12-30 18:36 发表
可能OO是以后的趋势!

趋势是肯定的,但还得看要解决的问题

论坛徽章:
0
发表于 2007-12-30 20:12 |显示全部楼层
OO只是一种思想,不用一个class也照样可以实现OO思想,只是没有用class方便,drupal就是这样实现的。
即使是号称纯OO的java,上来就是class、class、class,没class不干活儿的主儿,也完成可以以OP思想实现代码。

OO与OP,都是程序员思想上的,或者说设计上的不同。OO适合人类的思维方式,OP更贴近计算机的处理方式。

论坛徽章:
0
发表于 2008-01-01 15:13 |显示全部楼层
不管黑猫白猫,能够抓到老鼠就是好猫。

论坛徽章:
0
发表于 2008-01-01 15:43 |显示全部楼层
目前以及将来很长一段时间,php都是一次性筷子,一次性筷子有必要做的很精美耐用吗?

论坛徽章:
0
发表于 2008-01-02 09:08 |显示全部楼层
原本也是想用OO做PHP,但后来发现,不如用 java和PHP相结合的方式,各取所长,每种语言总有他的优缺点,只是我们使用者要灵活应用

论坛徽章:
0
发表于 2008-01-04 13:36 |显示全部楼层
OO的好处多多,虽然说效率是个问题,但是为将来能够省事打下了基础。有时候,特别是一些需要维持状态的情况,使用类会方便很多。
不需要从头到尾满眼都是类,但是如果意识到某个功能将来可能会重用的话,就应该有意识的,毫不犹豫的写成类。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP