- 论坛徽章:
- 0
|
原帖由 mikespook 于 2006-7-10 17:15 发表
php可使用不定参数个数的函数~~用func_num_args(),func_get_arg(),和 func_get_args() 可以实现~~配合call_user_func系列就能实现类似javascript的事件驱动~~~
每个语言都有自己的语法,你不能要 ...
语法是固定的结构,当然不能随便改变,不然就是另一种语言了.
不过感觉你太拘泥于形式了.
JS的事件注册很灵活,有ONXX =eventHandle 的,也可以用:
targetObj.addEventListener('eventName',eventFunc,true); // for firefox
这样的方式.
所以PHP也可以用这种形式来模拟成:
targetObj->addEventListener('eventName','eventFunc',true);
(语法结构上的模拟只是为了增加开发人员熟悉度的,使代码易懂,只要逻辑上一样用其他结构形式也可以的.)
不过这时传入的eventFunc只能是字符串,但JS的可以是function handle也可以是匿名涵数.
如常见的window.setTimeout('test()',3000);
似乎也是要传入回调涵数名的字符串,如果要给test()传入个object的参数似乎就不行了,但是利用匿名涵数就可以这样实现:
window.setTimeout(function(){test(someObject)},3000);
这样setTimeout这个事件就不用关心传入的回调涵数的参数形式是怎样的,只要关心准时触发就行.
至于用call_user_func 系列,应该是可以模拟的,没有具体实现过就不知道细节如何了.
不过有个问题是这样一来回调涵数里都要使用func_get_args 等涵数来获取参数.但这样一来就不能通过ZDE等支持tool tips 的IDE来获取function tips了(如图,虽然还可以通过规范phpDoc来强调参数),我觉得这个功能对在不熟悉的程序框架中开发时很有用的(不用IDE别找碴). |
|