mikespook 发表于 2006-07-11 11:56

原帖由 crazysoul 于 2006-7-11 11:29 发表



语法是固定的结构,当然不能随便改变,不然就是另一种语言了.
不过感觉你太拘泥于形式了.
JS的事件注册很灵活,有ONXX =eventHandle 的,也可以用:
targetObj.addEventListener('eventName',eventFunc,true) ...


关于php实现这个 function handle 方式的匿名函数可能还是需要研究一下php的原理~~

我的理解,不一定对,不过可以一起讨论一下~~

php中使用了两种方式来处理变量,对象和函数,一种是字典表,一种是资源~~~~资源掠过不说,这东西更多是被当作对象来用(其实也是个 handle,如“Object #123”)~~~那么一般来说函数是注册于字典表中以字符串的形式索引~~由于 function 本身的handle就是字符串,那也就没有js中的两种形式“字符串”和“function handle”~~

php现在还无法重载运算符,否则实现 onxx=xxxx 的形式也不会很困难~~看看后继版本是否能提供吧~~~

func_num_args() 只是一个实现的方式,我个人很少在大一些的系统中使用,也不推荐使用(命令行程序除外),因为要用注释表达清楚方法实现方式很困难~~~同时接口都是设计好的,一般不定参数的方法都会采用array方式传递~~~以保证健壮性~~~~

更多使用的就是唠叨说的call_user_func_array来实现不定个数参数~~

实际上php手册上推荐的 callback 的实现方式是用 call_user_func 和 call_user_func_array 。毕竟追究 event 的原理本身还是 callback 实现的~~~ 遗憾的是 php 没有提供 event 这个显式的方法来使用~~


如果哪天php可以使用这样的调用方式,那匿名函数应该也就可以直接使用了~~

(new CObject)->someMethod($arg1, $arg2);

呵呵~~

mikespook 发表于 2006-07-11 17:01

另外,补充一下,一直忽略了的函数~~

create_function

这个东东本身就是用来“Create an anonymous (lambda-style) function”的,呵呵~~

crazysoul 发表于 2006-07-11 21:19

刚刚想起一个概念性的问题.
onxxx的事件模式并不是JS的,而是DOM的.
不过匿名涵数就是JS的,配合DOM的这种事件注册特性,真是灵活.

另外国内的有一套PHP开发的"事件驱动"的框架,不知是怎样的,试过的可给些看法.

_kernel 发表于 2006-07-13 09:24

这里的事件是我们自己定义的事件

buptning 发表于 2012-12-11 22:22

写的太好了,解了我的疑惑。
页: 1 [2]
查看完整版本: [心得] 我对事件驱动的理解