CSDN博客

img froole

PHP模仿不了Java——PHP下目标指向编程的局限性

发表于2008/10/3 16:36:00  1739人阅读

PHP5已经支持了接口、抽象类、类成员访问权限等目标指向语言的功能,表面上似乎PHP也可以像Java那样写一个目标指向语言的程序。有很多框架也都相继支持了O/R、MVC等功能。但是,我个人觉得,这种让PHP程序变Java的照猫画虎,将会牺牲整体性能。

PHP支持了很多目标指向语言的语法不假,但还是要清楚的看到,PHP底层函数保存数据的格式人就是基本型+数组唱主角。
例如,HTTP请求参数,在PHP中可以用$_REQUEST得到,而$_REQUEST本身就是一个数组。现在要实现MVC,Servlet下面是HttpServletRequest型的实例,用getParameter提取请求参数,在Java下,他们本身就是用目标组合起来的数据。
现在到PHP了,如果也用get**,怎么办?把$_REQUEST封装起来,再根据每次请求生成实例?那么,直接用$_REQUEST就好了,还无端的加个婆婆干什么?访问量大了,这个婆婆肯定要增加无端的负荷。
表面上可能更像MVC了,但这不是违背了KISS的基本原则吗?

PHP对目标指向到底支持到什么程度?我想要以工厂模式直接执行某个目标实例的方法,版本5.3以上的PHP中,call_user_func函数虽然可以做到,但是跟执行普通函数一样,没有了实例的概念。这决定了,PHP在封装接口的时候,不可能像Java那样要啥来啥。

Discuz、OpenPNE等等,这些经过验证的,性能出色的web系统都在用PHP4的基本概念。
我也曾经参加过一个把PHP写成目标指向程序的工程,最后到了快完成的阶段,终于出现了性能瓶颈。最后大家也在总结失败原因,硬搬OOP是罪魁之一。

我不是否定OOP,而是想说,巧妙运用OOP可以提高开发效率,但是,PHP不是Java,在Java上已经证实了成功的案例,照搬到PHP上未必好用。用PHP实现OOP、MVC等概念,应该有PHP自己的特色。必须要根据PHP语言特点来实现有PHP特色的目标指向语言程序。
就像美国的民主无法copy到中国,而中国的管理体制copy到美国也不可能让他摆脱金融危机一样——自己的路,只能自己走。
PHP开发也得有自己的OOP风格。

0 0

相关博文

我的热门文章

img
取 消
img