background image

关于

PHP 事件驱动问题之我见

事件驱动这个概念是广义的。可以在客户端,也可以在服务器端。

Web 应用上,在客户端的事件是基于 JS 或是插件或是 JavaApplet 之类的东西,基本

上如果是插件或是

JAVAAPPLET 的话,就不属于 HTML 的范畴了,而真正必须用到 JS 的

场合其实并不多,最多就是

FORM 的提交或是链接点击之类的基本操作,因此谈论事件无

太大意义。

事件驱动真正的意义并不在于可视化编程,而在于它的概念,就象

OO 一样。事件驱动

其实是

OO 的一个延伸,它的最初原型是消息机制。但是事件驱动把消息封装成了一个可调

用的函数,有些类似于

API 中的回调函数,你自己可以定义这些函数执行的内容。而可视化

编程则把这些函数独立出来,定义好参数(多数是现成的对象),让你自己写代码并运用
这些参数(其实是用这些对象)做一些事情。

所以,

PHP 有事件驱动是完全可能的,主要在于框架的设计。而要做成 VB 之类所谓的

可视化事件驱动,则必须要有配套的集成开发环境,包括页面设计,事件编码,编译转码
之类的一系列功能才行。其实象点

NET 这样的事件驱动,只不过是把一些常用的 WEB 元素

或控件,如按钮、文本框之类的东西封装了一下,让你有个可视化的界面可以设计一下,当
它编译之后,仍然是

<input type="text">之类的文本,只是把你的事件代码转为了 JS 或是服

务器端代码而已。而

PHP 主要是由于 IDE 不够丰富,而且也没有预编译机制,所以最后提

交的代码还是最终的

PHP 代码,而不是点 NET 的资源代码与事件代码的混合体(一般是

符合

XML 规范的 ASP 文档,包含了非标准的 HTML 代码)。故此 PHP 还无法达到大家心

目中狭义的所谓事件驱动编程,但其实是完全可以没有问题的。

如果大家感兴趣,不妨到

www.php.net 官方主页去看一下一位中国哥们(Qiang Xue)

写的一套基于事件驱动的

PHP 框架 PRADO,这个还是获得高票当选的最佳,强烈推荐!

请参考

 http://www.zend.com/php5/contest ,你看了他的源代码后就会理解 PHP 的事件驱动

是怎么回事。但我认为,在这上面,由于

PHP 无预编译机制,而且过度依赖 OO(虽然是用

PHP5 写的代码),造成这个框架有些庞大,且使用比较复杂,可扩展性也不是很好。不过,
其中的理念非常之好,有些想法还解决了困惑我多日的问题。我下面简单介绍一下这个框架。

该框架用

ZDE 及 PHP5 写成,有详细文档,结构十分清晰,注释极为充分,代码非常

易于读懂,说明作者写码水平非常之高。作者明确说明,这套框架参考了

ASP 点 NET 及

Borland Delphi 的概念。

这个框架在验证性上非常之强(并不是指里面有什么验证登录之类的模块),十分健

壮,几乎不可能有什么直接的漏洞可以从外面攻入,它是引入了规范文件这个概念做限制