我来评PHP与面向对象
时间:2006-06-22 来源:ashchen
精彩来自开源中心:
http://www.cosrc.com/
http://www.cosrc.cn/
http://www.cosrc.net
看到好多论坛里讨论php的面向对象编程的争论,本文粗浅的记录一下本人对php和面向对象编程思想的理解
一、面向对象的优势
现如今,面向对象编程不再是陌生的词汇。随便搜了一下
http://dev.csdn.net/develop/article/24/24426.shtm
使用面向oo对象方法的12个优点:
维护费用低 质量高,效率高 容易扩展 适用于复杂项目的一个工具 以自然方式思考 等等
由于本人很少用到oo编程,总结如下,若有不当请多包函
1 继承
如果有基类,从基类继承扩展成自己的类,这个过程非常方便易懂
2 分工合作
3 代码重用
4 封装安全性
5 维护
二、php运行方式
我们知道在http协议中,一次请求自客户端发起后,会随着服务器返回数据而终结,当然现在大多数web服务器支持keep-alive,相当于客户端把车开走之后服务器还留着空车位,等他在下次还回来,这样能节省一部分开销....不过上述和php没有任何关系(^_^)
php运行的载体是web服务器(这里定为apache).apache接到客户端的.php文件请求会把解释任务交给php,从此php开始了使命,然而它的生命周期是及其短暂(当然越短越好,否则客户端要埋怨这个网站怎么这么慢),这个周期结束之后,php会释放内存,释放资源,等待下一次请求来临。
php作为一种解释型语言,很多时间要花费在源文件读取和语法扫描上;而编译型的程序,这些工作已经由编译器完成;include()是常用的包含函数,但是它在php和c语言中的作用完全不同:php中的include,每一次运行都会去读取一次被包含的文件;而c,只是告诉编译器源代码中需要那一部分,编译好的二进制文件里绝对不会再有include。
了解了上面2点,我们继续:
三、目前我为什么不看好php的面向对象编程
php的用途是什么?我的理解它是开发开发中小型网站和后台程序的厉器,有着丰富的函数库,处理字符串,文件,数字计算速度飞快;但是为什么我不看好它面向对象呢?
例:在windows,设计一个有图标的窗口,只需要在窗口基类继承过来一个,加上图标。这个过程不难理解,在内存中把基类复制过来加上自己的代码,简单又快速;现在我们看php的处理过程:一个请求过来 -> 解析基class ->继承,加上自己的代码->实例化 ->输出结果,这个过程看上去没有什么不对,但是对于一个每天有100000000点击的网站,这个过程要重复100000000次,而那些基类有没有必要重复解释那么多次?每一个基类一般是include过来的,这会有多少次重复的劳动(还好不是人来重复这个过程)?效率在哪里?当然随着计算机硬件发展,那一点overload已经算不了什么,可是硬件发展了,软件是不是也应该跟上哪?
我们回过头来看windows程序有什么不同?对,它是在内存里的,不管是复制还是继承,速度都是和去读磁盘无法比拟,而这些基类都在操作系统,在系统启动就已经掉入内存。
四、php什么时候使用面向对象?
当有若干人在开发一个大型项目,彼此之间只要调用封装好的类,初期设计相当合理,如果都遵循这个oo的思想,那么后期的维护将会比较简单。但是,有那么大的项目吗?这样的项目多吗?如果确有那样的项目,你会考虑用php吗?当然这由您来决定。
五、展望
php会不会出虚拟机我不确定,可是出了虚拟机和java有什么区别呢?如果php常驻内存,更高效率的使用内存,更好的数据库查询方式(例如连接池),更好的IDE开发调试环境,更强的安全机制,它的未来会不光明?
不过这只是展望,眼下php的oo解决方案似乎只有eaccelerator(
http://eaccelerator.net/
),使用它的缓存功能,将基类对象或对象序列化之后写入缓存,当然它还有其他功能,据说能提高性能10倍到100倍(当然指纯php页面部分),这里关于它的详细使用方法和介绍省略(over)
http://www.cosrc.com/
http://www.cosrc.cn/
http://www.cosrc.net
看到好多论坛里讨论php的面向对象编程的争论,本文粗浅的记录一下本人对php和面向对象编程思想的理解
一、面向对象的优势
现如今,面向对象编程不再是陌生的词汇。随便搜了一下
http://dev.csdn.net/develop/article/24/24426.shtm
使用面向oo对象方法的12个优点:
维护费用低 质量高,效率高 容易扩展 适用于复杂项目的一个工具 以自然方式思考 等等
由于本人很少用到oo编程,总结如下,若有不当请多包函
1 继承
如果有基类,从基类继承扩展成自己的类,这个过程非常方便易懂
2 分工合作
3 代码重用
4 封装安全性
5 维护
二、php运行方式
我们知道在http协议中,一次请求自客户端发起后,会随着服务器返回数据而终结,当然现在大多数web服务器支持keep-alive,相当于客户端把车开走之后服务器还留着空车位,等他在下次还回来,这样能节省一部分开销....不过上述和php没有任何关系(^_^)
php运行的载体是web服务器(这里定为apache).apache接到客户端的.php文件请求会把解释任务交给php,从此php开始了使命,然而它的生命周期是及其短暂(当然越短越好,否则客户端要埋怨这个网站怎么这么慢),这个周期结束之后,php会释放内存,释放资源,等待下一次请求来临。
php作为一种解释型语言,很多时间要花费在源文件读取和语法扫描上;而编译型的程序,这些工作已经由编译器完成;include()是常用的包含函数,但是它在php和c语言中的作用完全不同:php中的include,每一次运行都会去读取一次被包含的文件;而c,只是告诉编译器源代码中需要那一部分,编译好的二进制文件里绝对不会再有include。
了解了上面2点,我们继续:
三、目前我为什么不看好php的面向对象编程
php的用途是什么?我的理解它是开发开发中小型网站和后台程序的厉器,有着丰富的函数库,处理字符串,文件,数字计算速度飞快;但是为什么我不看好它面向对象呢?
例:在windows,设计一个有图标的窗口,只需要在窗口基类继承过来一个,加上图标。这个过程不难理解,在内存中把基类复制过来加上自己的代码,简单又快速;现在我们看php的处理过程:一个请求过来 -> 解析基class ->继承,加上自己的代码->实例化 ->输出结果,这个过程看上去没有什么不对,但是对于一个每天有100000000点击的网站,这个过程要重复100000000次,而那些基类有没有必要重复解释那么多次?每一个基类一般是include过来的,这会有多少次重复的劳动(还好不是人来重复这个过程)?效率在哪里?当然随着计算机硬件发展,那一点overload已经算不了什么,可是硬件发展了,软件是不是也应该跟上哪?
我们回过头来看windows程序有什么不同?对,它是在内存里的,不管是复制还是继承,速度都是和去读磁盘无法比拟,而这些基类都在操作系统,在系统启动就已经掉入内存。
四、php什么时候使用面向对象?
当有若干人在开发一个大型项目,彼此之间只要调用封装好的类,初期设计相当合理,如果都遵循这个oo的思想,那么后期的维护将会比较简单。但是,有那么大的项目吗?这样的项目多吗?如果确有那样的项目,你会考虑用php吗?当然这由您来决定。
五、展望
php会不会出虚拟机我不确定,可是出了虚拟机和java有什么区别呢?如果php常驻内存,更高效率的使用内存,更好的数据库查询方式(例如连接池),更好的IDE开发调试环境,更强的安全机制,它的未来会不光明?
不过这只是展望,眼下php的oo解决方案似乎只有eaccelerator(
http://eaccelerator.net/
),使用它的缓存功能,将基类对象或对象序列化之后写入缓存,当然它还有其他功能,据说能提高性能10倍到100倍(当然指纯php页面部分),这里关于它的详细使用方法和介绍省略(over)
相关阅读 更多 +