如题所述
ããåè¨
ããæè¿å¨å¼åä¸ä¸ªPHPç³»ç»ï¼ä¸ºäºæé«ç³»ç»çæ©å±æ§ï¼ææ³å¨ç³»ç»ä¸å å ¥ç±»ä¼¼Javascriptçäºä»¶å¤çæºå¶ï¼ä¾å¦ï¼ææ³å¨ä¸ç¯æ°é»è¢«æ·»å 以åï¼ææ³è®°å½ä¸ä¸æ¥å¿ï¼ç¨ç±»ä¼¼Javascriptç代ç ï¼åºè¯¥æ¯è¿æ ·åçï¼
ããfunction fnCallBack( $news )
ãã{
ãã//å°$newsçä¿¡æ¯è®°å½å°æ¥å¿ä¸
ããwriteLog( $news->getTitle().' has been added successfully!');
ãã}
ãã$newsEventManager->addEventListener( 'add' , fnCallBack );
ããå ¶ä¸ï¼fnCallBackå½æ°æ¯åè°å½æ°ï¼addEventListener表示çå¬newsEventManagerçaddäºä»¶ãå½ä¸ç¯news被add以åï¼ç³»ç»å°±ä¼è°ç¨fnCallBackå½æ°ï¼ä»èå®æwriteLogçå¨ä½ã
ããä½æ¯ï¼PHPä¸çå½æ°ä¼ éæ¹æ³åJavascriptæå¾å¤§çä¸åãå¨Javascriptä¸ï¼å½æ°ä¹æ¯å¯¹è±¡ï¼å®å¯ä»¥å¾æ¹ä¾¿çå½ä½åæ°ä¼ éï¼ä½æ¯PHPä¸è¡ã
ãã$newsEventManager->addEventListener( 'add' , fnCallBack );
ããä¸é¢è¿è¡ä»£ç ä¸çfnCallBackï¼çä¸å»å¥½åæ¯é£ä¸ªå½æ°çå¥æï¼ä½å®è´¨ä¸å®æ¯ä¸ä¸ªå符串ï¼å¹¶ä¸æ¯æ们æè¦çå½æ°ã
ãã为äºå®ç°æ们çäºä»¶æ¨¡åï¼æå¿ è¦ç 究ä¸ä¸PHPçåè°å½æ°çå®ç°æ¹æ³ã
ããå ¨å±å½æ°çåè°
ããè¿éçå ¨å±å½æ°çææï¼æ¯ç´æ¥ä½¿ç¨functionå®ä¹çå½æ°ï¼å®ä¸å å«å¨ä»»ä½å¯¹è±¡æç±»ä¹ä¸ã请çä¸é¢çä¾å
ãã示ä¾ä»£ç
ããfunction fnCallBack( $msg1 , $msg2 )
ãã{
ããecho 'msg1:'.$msg1;
ããecho "<br />\n";
ããecho 'msg2:'.$msg2;
ãã}
ãã$fnName = "fnCallBack";
ãã$params = array( 'hello' , 'world' );
ããcall_user_func_array( $fnName , $params );
ãã代ç 说æï¼
ããè¿é使ç¨äºPHPå ç½®çå½æ°call_user_func_arrayæ¥è¿è¡è°ç¨ãcall_user_func_arrayæ两个åæ°ï¼ç¬¬1个åæ°æ¯ä¸ä¸ªå符串ï¼è¡¨ç¤ºè¦è°ç¨çå½æ°åï¼ç¬¬2个åæ°æ¯ä¸ä¸ªæ°ç»ï¼è¡¨ç¤ºåæ°å表ï¼æç §é¡ºåºä¾æ¬¡ä¼ä¼ éç»è¦è°ç¨çå½æ°ã
ããææå¦ä¸ï¼
ããç±»çéææ¹æ³çåè°
ããå¦ææ们è¦åè°çæ¹æ³ï¼æ¯ä¸ä¸ªç±»çéææ¹æ³ï¼é£æä¹åå¢ï¼æ们ä¾ç¶å¯ä»¥å©ç¨PHPå ç½®çcall_user_func_arrayæ¹æ³æ¥è¿è¡è°ç¨ï¼è¯·ç示ä¾ï¼
ãã示ä¾ä»£ç ï¼
ããclass MyClass
ãã{
ããpublic static function fnCallBack( $msg1 , $msg2 )
ãã{
ããecho 'msg1:'.$msg1;
ããecho "<br />\n";
ããecho 'msg2:'.$msg2;
ãã}
ãã}
ãã$className = 'MyClass';
ãã$fnName = "fnCallBack";
ãã$params = array( 'hello' , 'world' );
ããcall_user_func_array( array( $className , $fnName ) , $params );
ãã代ç 说æï¼
ããè¿æ®µä»£ç å第1ç§æ¹æ³ç代ç å¾ç¸ä¼¼ï¼æ们å°ç±»åï¼MyClassï¼ä¹ä½ä¸ºcall_user_func_arrayç第1个åæ°ä¼ éè¿å»ï¼å°±å¯ä»¥å®ç°ç±»çéææ¹æ³çåè°äºã注æï¼è¿æ¶call_user_func_arrayç第1个åæ°æ¯ä¸ä¸ªæ°ç»äºï¼æ°ç»ç第1个å ç´ æ¯ç±»åï¼ç¬¬äºä¸ªå ç´ æ¯è¦è°ç¨çå½æ°å
ããè¿è¡ç»æï¼
ããï¼å ¶å®å第1ç§æ¹æ³çç»ææ¯ä¸æ ·ç ^_^ ï¼
ãã继ç»ç 究
ããå¦ææç¨è¿ç§æ¹æ³è°ç¨ä¸ä¸ªç±»çééææ¹æ³ï¼ä¹å°±æ¯æstaticå»æï¼ï¼ä¼åºç°ä»ä¹ç»æå¢ï¼è¯·çä¸é¢ä»£ç
ããclass MyClass
ãã{
ããpublic function fnCallBack( $msg1 , $msg2 )
ãã{
ããecho 'msg1:'.$msg1;
ããecho "<br />\n";
ããecho 'msg2:'.$msg2;
ãã}
ãã}
ãã$className = 'MyClass';
ãã$fnName = "fnCallBack";
ãã$params = array( 'hello' , 'world' );
ããcall_user_func_array( array( $className , $fnName ) , $params );
ããè¿è¡ç»æ
ããååé¢çç»æè¿æ¯ä¸æ ·çããã
ããç°å¨æ为è¿ä¸ªç±»æ·»å ä¸ç¹å±æ§ï¼å¹¶å¨æ¹æ³ä¸å¼ç¨
ããclass MyClass
ãã{
ããprivate $name = 'abc';
ããpublic function fnCallBack( $msg1 , $msg2 )
ãã{
ããecho 'object name:'.$this->name;
ããecho "<br />\n";
ããecho 'msg1:'.$msg1;
ããecho "<br />\n";
ããecho 'msg2:'.$msg2;
ãã}
ãã}
ãã$className = 'MyClass';
ãã$fnName = "fnCallBack";
ãã$params = array( 'hello' , 'world' );
ããcall_user_func_array( array( $className , $fnName ) , $params );
ããè¿è¡ç»æ
ããåºç°è§£æé误ï¼æ示$this没æå¨å¯¹è±¡ç¯å¢ä¸åºç°ï¼è¯´æè¿ä¸ªæ¹æ³ä¸è½ç¨ç±»æ¥è°ç¨ï¼èæ¯è¦ç¨å¯¹è±¡æ¥è°ç¨ãé£æ们就修æ¹ä¸ä¸ä»£ç ï¼å建ä¸ä¸ªå¯¹è±¡ï¼
ããclass MyClass
ãã{
ããpublic function fnCallBack( $msg1 , $msg2 )
ãã{
ããecho 'msg1:'.$msg1;
ããecho "<br />\n";
ããecho 'msg2:'.$msg2;
ãã}
ãã}
ãã$myobj = new MyClass();
ãã$className = 'myobj';
ãã$fnName = "fnCallBack";
ãã$params = array( 'hello' , 'world' );
ããcall_user_func_array( array( $className , $fnName ) , $params );
ããè¿è¡ç»æï¼
ããæ示call_user_func_arrayç第1个åæ°éæ³ï¼ä¹å°±æ¯è¯´ï¼è°ç¨å¤±è´¥ãçæ¥æ们ä¸è½ç¨call_user_func_arrayæ¹æ³æ¥åè°ä¸ä¸ªå¯¹è±¡çæ¹æ³äºï¼é£ä¹å¦ä½å®ç°å¯¹è±¡æ¹æ³çåè°çï¼
ãã对象çæ¹æ³çåè°
ããæå ç¨æåå§çå符串形å¼çè°ç¨æ¹æ³å°è¯äºä¸ä¸ï¼å¦ä¸æ示ï¼
ããclass MyClass
ãã{
ããprivate $name = 'abc';
ããpublic function fnCallBack( $msg1 = 'default msg1' , $msg2 = 'default msg2' )
ãã{
ããecho 'object name:'.$this->name;
ããecho "<br />\n";
ããecho 'msg1:'.$msg1;
ããecho "<br />\n";
ããecho 'msg2:'.$msg2;
ãã}
ãã}
ãã$myobj = new MyClass();
ãã$fnName = "fnCallBack";
ãã$params = array( 'hello' , 'world' );
ãã$myobj->$fnName();
ããæåäºï¼è¾åºç»æ
ããè°ç¨æ¯æåäºï¼ä¸è¿å¦ä½æåæ°paramsä¼ ç»è¿ä¸ªæ¹æ³å¢ï¼å¦ææparamsç´æ¥ä¼ è¿å»ï¼é£ä¹å®ä¼ä½ä¸º1个åæ°ï¼æä¹æparamsæå¼æ¥ä¼ è¿å»å¢ï¼
ããæ¥äºä¸PHPæåï¼æ¾å°äºcreate_functionå½æ°ï¼è¿ä¸ªæ¹æ³å¯ä»¥ç¨å符串æ¥å建ä¸ä¸ªå¿åå½æ°ï¼å¥½ï¼ææè·¯äºï¼å¯ä»¥å建ä¸ä¸ªå¿åçå½æ°ï¼å¨è¿ä¸ªå¿åå½æ°ä¸ï¼è°ç¨æ们çåè°å½æ°ï¼å¹¶æåæ°ä¼ è¿å»ã
ããæå æå¨å建ä¸ä¸ªå¿åå½æ°anonymousï¼å¨è¿ä¸ªå½æ°ä¸ï¼ç¨åé¢è¯åºæ¥çæ¹æ³è°ç¨åè°å½æ°ï¼å¦ä¸æ示ï¼
ããclass MyClass
ãã{
ããprivate $name = 'abc';
ããpublic function fnCallBack( $msg1 = 'default msg1' , $msg2 = 'default msg2' )
ãã{
ããecho 'object name:'.$this->name;
ããecho "<br />\n";
ããecho 'msg1:'.$msg1;
ããecho "<br />\n";
ããecho 'msg2:'.$msg2;
ãã}
ãã}
ãã$myobj = new MyClass();
ãã$fnName = "fnCallBack";
ãã$params = array( 'hello' , 'world' );
ããfunction anonymous()
ãã{
ããglobal $myobj;
ããglobal $fnName;
ããglobal $params;
ãã$myobj->$fnName( $params[0] , $params[1] );
ãã}
ããanonymous();
ããæåäºï¼å¯ä»¥çå°ï¼å¯¹è±¡çå±æ§nameä¹è¾åºæ¥äº
ããç¶åï¼æç¨create_functionæ¥å建è¿ä¸ªå¿åå½æ°ï¼åæ¶ï¼ä»£ç ä¸çparams[0],params[1]åºè¯¥æ¯å¨æçæçï¼ä»£ç å¦ä¸ï¼
ãã$strParams = '';
ãã$strCode = 'global $myobj;global $fnName;global $params;$myobj->$fnName(';
ããfor ( $i = 0 ; $i < count( $params ) ; $i ++ )
ãã{
ãã$strParams .= ( '$params['.$i.']' );
ããif ( $i != count( $params )-1 )
ãã{
ãã$strParams .= ',';
ãã}
ãã}
ãã$strCode = $strCode.$strParams.");";
ãã$anonymous = create_function( '' , $strCode);
ãã$anonymous();
ããè¿æ®µä»£ç å¯ä»¥å®ä¹ä¸ä¸ªå¿åå½æ°ï¼å¹¶ä¿åå¨$anonymousåéä¸ï¼æåè°ç¨è¿ä¸ª$anonymousï¼å®ç°äºæ¹æ³çåè°ï¼å¦å¾
ããPHPäºä»¶æ¨¡åï¼è§å¯è 模å¼ï¼çå®ç°æè·¯
ããè³æ¤ï¼PHPä¸ç3ç§å¸¸è§çå½æ°ç±»åï¼å ¨å±å½æ°ï¼ç±»éæå½æ°ï¼å¯¹è±¡çæ¹æ³ï¼é½å¯ä»¥åè°äºï¼å¯ä»¥å®ç°æç« ä¸å¼å§è¯´çäºä»¶æ¨¡åäº ï¼ï¼
ããäºä»¶æ¨¡å模仿FirefoxçJavascriptå®ç°ï¼æ3个æ¹æ³ï¼åå«æ¯
ããaddEventListenerï¼æ³¨åä¸ä¸ªäºä»¶ä¸çååºåè°å½æ°
ããremoveEventListenerï¼å é¤ä¸ä¸ªäºä»¶ä¸çååºåè°å½æ°
ããfireï¼è§¦åä¸ä¸ªäºä»¶ï¼ä¹å°±æ¯å¾ªç¯è°ç¨ææååºè¿ä¸ªäºä»¶çåè°å½æ°
ããä¸è¿ï¼ç±äºç¬¬2ã第3ç§æ¹æ³éè¦ä¼ éä¸ä¸æï¼ä¹å°±æ¯ç±»åå对象åï¼ï¼æ以addEventListeneråremoveEventListeneråºè¯¥æ3个åæ°ï¼ææ¯è¿æ ·è®¾è®¡çï¼
ããfunction addEventListener( $evtName , $handler , $scope = null )
ãã第1个åæ°è¡¨ç¤ºäºä»¶åï¼å符串类å
ãã第2个åæ°è¡¨ç¤ºåè°å½æ°åï¼å符串类å
ãã第3个åæ°$scopeæ¯ä¸ä¸æç¯å¢ï¼ä¸å ±æ3ç§ç±»åï¼nullè¡¨ç¤ºä¼ å ¥çhandlerå½æ°æ¯ä¸ä¸ªå ¨å±å½æ°ï¼å符串类åè¡¨ç¤ºä¼ å ¥çhandlerå½æ°æ¯scopeç±»çéæå½æ°ï¼å¯¹è±¡ç±»åè¡¨ç¤ºä¼ å ¥çscopeæ¯ä¸ä¸ªå¯¹è±¡ï¼handlerå½æ°æ¯å¯¹è±¡çä¸ä¸ªæ¹æ³ã
ããfunction fire( $evtName , $params = null )
ããè¿ä¸ªæ¹æ³å ï¼ä¼è¯»ååºææååºevtNameçhandlerï¼ç¶åå¤æå®å¯¹åºçscopeï¼å¦ææ¯nullï¼åç¨æ¬æ第1ç§æ¹æ³åè°ï¼å¦ææ¯å符串ï¼åç¨æ¬æ第2ç§æ¹æ³åè°ï¼å¦ææ¯å¯¹è±¡ï¼åç¨æ¬æ第3ç§æ¹æ³åè°ãè¿æ ·ï¼ä¸ä¸ªPHPçäºä»¶æ¨¡åå°±å¯ä»¥å®ç°äºï¼èä¸å¯ä»¥å°åè°å½æ°æ¾å¨æ个对象ä¸ã
ããæè¿å¨å¼åä¸ä¸ªPHPç³»ç»ï¼ä¸ºäºæé«ç³»ç»çæ©å±æ§ï¼ææ³å¨ç³»ç»ä¸å å ¥ç±»ä¼¼Javascriptçäºä»¶å¤çæºå¶ï¼ä¾å¦ï¼ææ³å¨ä¸ç¯æ°é»è¢«æ·»å 以åï¼ææ³è®°å½ä¸ä¸æ¥å¿ï¼ç¨ç±»ä¼¼Javascriptç代ç ï¼åºè¯¥æ¯è¿æ ·åçï¼
ããfunction fnCallBack( $news )
ãã{
ãã//å°$newsçä¿¡æ¯è®°å½å°æ¥å¿ä¸
ããwriteLog( $news->getTitle().' has been added successfully!');
ãã}
ãã$newsEventManager->addEventListener( 'add' , fnCallBack );
ããå ¶ä¸ï¼fnCallBackå½æ°æ¯åè°å½æ°ï¼addEventListener表示çå¬newsEventManagerçaddäºä»¶ãå½ä¸ç¯news被add以åï¼ç³»ç»å°±ä¼è°ç¨fnCallBackå½æ°ï¼ä»èå®æwriteLogçå¨ä½ã
ããä½æ¯ï¼PHPä¸çå½æ°ä¼ éæ¹æ³åJavascriptæå¾å¤§çä¸åãå¨Javascriptä¸ï¼å½æ°ä¹æ¯å¯¹è±¡ï¼å®å¯ä»¥å¾æ¹ä¾¿çå½ä½åæ°ä¼ éï¼ä½æ¯PHPä¸è¡ã
ãã$newsEventManager->addEventListener( 'add' , fnCallBack );
ããä¸é¢è¿è¡ä»£ç ä¸çfnCallBackï¼çä¸å»å¥½åæ¯é£ä¸ªå½æ°çå¥æï¼ä½å®è´¨ä¸å®æ¯ä¸ä¸ªå符串ï¼å¹¶ä¸æ¯æ们æè¦çå½æ°ã
ãã为äºå®ç°æ们çäºä»¶æ¨¡åï¼æå¿ è¦ç 究ä¸ä¸PHPçåè°å½æ°çå®ç°æ¹æ³ã
ããå ¨å±å½æ°çåè°
ããè¿éçå ¨å±å½æ°çææï¼æ¯ç´æ¥ä½¿ç¨functionå®ä¹çå½æ°ï¼å®ä¸å å«å¨ä»»ä½å¯¹è±¡æç±»ä¹ä¸ã请çä¸é¢çä¾å
ãã示ä¾ä»£ç
ããfunction fnCallBack( $msg1 , $msg2 )
ãã{
ããecho 'msg1:'.$msg1;
ããecho "<br />\n";
ããecho 'msg2:'.$msg2;
ãã}
ãã$fnName = "fnCallBack";
ãã$params = array( 'hello' , 'world' );
ããcall_user_func_array( $fnName , $params );
ãã代ç 说æï¼
ããè¿é使ç¨äºPHPå ç½®çå½æ°call_user_func_arrayæ¥è¿è¡è°ç¨ãcall_user_func_arrayæ两个åæ°ï¼ç¬¬1个åæ°æ¯ä¸ä¸ªå符串ï¼è¡¨ç¤ºè¦è°ç¨çå½æ°åï¼ç¬¬2个åæ°æ¯ä¸ä¸ªæ°ç»ï¼è¡¨ç¤ºåæ°å表ï¼æç §é¡ºåºä¾æ¬¡ä¼ä¼ éç»è¦è°ç¨çå½æ°ã
ããææå¦ä¸ï¼
ããç±»çéææ¹æ³çåè°
ããå¦ææ们è¦åè°çæ¹æ³ï¼æ¯ä¸ä¸ªç±»çéææ¹æ³ï¼é£æä¹åå¢ï¼æ们ä¾ç¶å¯ä»¥å©ç¨PHPå ç½®çcall_user_func_arrayæ¹æ³æ¥è¿è¡è°ç¨ï¼è¯·ç示ä¾ï¼
ãã示ä¾ä»£ç ï¼
ããclass MyClass
ãã{
ããpublic static function fnCallBack( $msg1 , $msg2 )
ãã{
ããecho 'msg1:'.$msg1;
ããecho "<br />\n";
ããecho 'msg2:'.$msg2;
ãã}
ãã}
ãã$className = 'MyClass';
ãã$fnName = "fnCallBack";
ãã$params = array( 'hello' , 'world' );
ããcall_user_func_array( array( $className , $fnName ) , $params );
ãã代ç 说æï¼
ããè¿æ®µä»£ç å第1ç§æ¹æ³ç代ç å¾ç¸ä¼¼ï¼æ们å°ç±»åï¼MyClassï¼ä¹ä½ä¸ºcall_user_func_arrayç第1个åæ°ä¼ éè¿å»ï¼å°±å¯ä»¥å®ç°ç±»çéææ¹æ³çåè°äºã注æï¼è¿æ¶call_user_func_arrayç第1个åæ°æ¯ä¸ä¸ªæ°ç»äºï¼æ°ç»ç第1个å ç´ æ¯ç±»åï¼ç¬¬äºä¸ªå ç´ æ¯è¦è°ç¨çå½æ°å
ããè¿è¡ç»æï¼
ããï¼å ¶å®å第1ç§æ¹æ³çç»ææ¯ä¸æ ·ç ^_^ ï¼
ãã继ç»ç 究
ããå¦ææç¨è¿ç§æ¹æ³è°ç¨ä¸ä¸ªç±»çééææ¹æ³ï¼ä¹å°±æ¯æstaticå»æï¼ï¼ä¼åºç°ä»ä¹ç»æå¢ï¼è¯·çä¸é¢ä»£ç
ããclass MyClass
ãã{
ããpublic function fnCallBack( $msg1 , $msg2 )
ãã{
ããecho 'msg1:'.$msg1;
ããecho "<br />\n";
ããecho 'msg2:'.$msg2;
ãã}
ãã}
ãã$className = 'MyClass';
ãã$fnName = "fnCallBack";
ãã$params = array( 'hello' , 'world' );
ããcall_user_func_array( array( $className , $fnName ) , $params );
ããè¿è¡ç»æ
ããååé¢çç»æè¿æ¯ä¸æ ·çããã
ããç°å¨æ为è¿ä¸ªç±»æ·»å ä¸ç¹å±æ§ï¼å¹¶å¨æ¹æ³ä¸å¼ç¨
ããclass MyClass
ãã{
ããprivate $name = 'abc';
ããpublic function fnCallBack( $msg1 , $msg2 )
ãã{
ããecho 'object name:'.$this->name;
ããecho "<br />\n";
ããecho 'msg1:'.$msg1;
ããecho "<br />\n";
ããecho 'msg2:'.$msg2;
ãã}
ãã}
ãã$className = 'MyClass';
ãã$fnName = "fnCallBack";
ãã$params = array( 'hello' , 'world' );
ããcall_user_func_array( array( $className , $fnName ) , $params );
ããè¿è¡ç»æ
ããåºç°è§£æé误ï¼æ示$this没æå¨å¯¹è±¡ç¯å¢ä¸åºç°ï¼è¯´æè¿ä¸ªæ¹æ³ä¸è½ç¨ç±»æ¥è°ç¨ï¼èæ¯è¦ç¨å¯¹è±¡æ¥è°ç¨ãé£æ们就修æ¹ä¸ä¸ä»£ç ï¼å建ä¸ä¸ªå¯¹è±¡ï¼
ããclass MyClass
ãã{
ããpublic function fnCallBack( $msg1 , $msg2 )
ãã{
ããecho 'msg1:'.$msg1;
ããecho "<br />\n";
ããecho 'msg2:'.$msg2;
ãã}
ãã}
ãã$myobj = new MyClass();
ãã$className = 'myobj';
ãã$fnName = "fnCallBack";
ãã$params = array( 'hello' , 'world' );
ããcall_user_func_array( array( $className , $fnName ) , $params );
ããè¿è¡ç»æï¼
ããæ示call_user_func_arrayç第1个åæ°éæ³ï¼ä¹å°±æ¯è¯´ï¼è°ç¨å¤±è´¥ãçæ¥æ们ä¸è½ç¨call_user_func_arrayæ¹æ³æ¥åè°ä¸ä¸ªå¯¹è±¡çæ¹æ³äºï¼é£ä¹å¦ä½å®ç°å¯¹è±¡æ¹æ³çåè°çï¼
ãã对象çæ¹æ³çåè°
ããæå ç¨æåå§çå符串形å¼çè°ç¨æ¹æ³å°è¯äºä¸ä¸ï¼å¦ä¸æ示ï¼
ããclass MyClass
ãã{
ããprivate $name = 'abc';
ããpublic function fnCallBack( $msg1 = 'default msg1' , $msg2 = 'default msg2' )
ãã{
ããecho 'object name:'.$this->name;
ããecho "<br />\n";
ããecho 'msg1:'.$msg1;
ããecho "<br />\n";
ããecho 'msg2:'.$msg2;
ãã}
ãã}
ãã$myobj = new MyClass();
ãã$fnName = "fnCallBack";
ãã$params = array( 'hello' , 'world' );
ãã$myobj->$fnName();
ããæåäºï¼è¾åºç»æ
ããè°ç¨æ¯æåäºï¼ä¸è¿å¦ä½æåæ°paramsä¼ ç»è¿ä¸ªæ¹æ³å¢ï¼å¦ææparamsç´æ¥ä¼ è¿å»ï¼é£ä¹å®ä¼ä½ä¸º1个åæ°ï¼æä¹æparamsæå¼æ¥ä¼ è¿å»å¢ï¼
ããæ¥äºä¸PHPæåï¼æ¾å°äºcreate_functionå½æ°ï¼è¿ä¸ªæ¹æ³å¯ä»¥ç¨å符串æ¥å建ä¸ä¸ªå¿åå½æ°ï¼å¥½ï¼ææè·¯äºï¼å¯ä»¥å建ä¸ä¸ªå¿åçå½æ°ï¼å¨è¿ä¸ªå¿åå½æ°ä¸ï¼è°ç¨æ们çåè°å½æ°ï¼å¹¶æåæ°ä¼ è¿å»ã
ããæå æå¨å建ä¸ä¸ªå¿åå½æ°anonymousï¼å¨è¿ä¸ªå½æ°ä¸ï¼ç¨åé¢è¯åºæ¥çæ¹æ³è°ç¨åè°å½æ°ï¼å¦ä¸æ示ï¼
ããclass MyClass
ãã{
ããprivate $name = 'abc';
ããpublic function fnCallBack( $msg1 = 'default msg1' , $msg2 = 'default msg2' )
ãã{
ããecho 'object name:'.$this->name;
ããecho "<br />\n";
ããecho 'msg1:'.$msg1;
ããecho "<br />\n";
ããecho 'msg2:'.$msg2;
ãã}
ãã}
ãã$myobj = new MyClass();
ãã$fnName = "fnCallBack";
ãã$params = array( 'hello' , 'world' );
ããfunction anonymous()
ãã{
ããglobal $myobj;
ããglobal $fnName;
ããglobal $params;
ãã$myobj->$fnName( $params[0] , $params[1] );
ãã}
ããanonymous();
ããæåäºï¼å¯ä»¥çå°ï¼å¯¹è±¡çå±æ§nameä¹è¾åºæ¥äº
ããç¶åï¼æç¨create_functionæ¥å建è¿ä¸ªå¿åå½æ°ï¼åæ¶ï¼ä»£ç ä¸çparams[0],params[1]åºè¯¥æ¯å¨æçæçï¼ä»£ç å¦ä¸ï¼
ãã$strParams = '';
ãã$strCode = 'global $myobj;global $fnName;global $params;$myobj->$fnName(';
ããfor ( $i = 0 ; $i < count( $params ) ; $i ++ )
ãã{
ãã$strParams .= ( '$params['.$i.']' );
ããif ( $i != count( $params )-1 )
ãã{
ãã$strParams .= ',';
ãã}
ãã}
ãã$strCode = $strCode.$strParams.");";
ãã$anonymous = create_function( '' , $strCode);
ãã$anonymous();
ããè¿æ®µä»£ç å¯ä»¥å®ä¹ä¸ä¸ªå¿åå½æ°ï¼å¹¶ä¿åå¨$anonymousåéä¸ï¼æåè°ç¨è¿ä¸ª$anonymousï¼å®ç°äºæ¹æ³çåè°ï¼å¦å¾
ããPHPäºä»¶æ¨¡åï¼è§å¯è 模å¼ï¼çå®ç°æè·¯
ããè³æ¤ï¼PHPä¸ç3ç§å¸¸è§çå½æ°ç±»åï¼å ¨å±å½æ°ï¼ç±»éæå½æ°ï¼å¯¹è±¡çæ¹æ³ï¼é½å¯ä»¥åè°äºï¼å¯ä»¥å®ç°æç« ä¸å¼å§è¯´çäºä»¶æ¨¡åäº ï¼ï¼
ããäºä»¶æ¨¡å模仿FirefoxçJavascriptå®ç°ï¼æ3个æ¹æ³ï¼åå«æ¯
ããaddEventListenerï¼æ³¨åä¸ä¸ªäºä»¶ä¸çååºåè°å½æ°
ããremoveEventListenerï¼å é¤ä¸ä¸ªäºä»¶ä¸çååºåè°å½æ°
ããfireï¼è§¦åä¸ä¸ªäºä»¶ï¼ä¹å°±æ¯å¾ªç¯è°ç¨ææååºè¿ä¸ªäºä»¶çåè°å½æ°
ããä¸è¿ï¼ç±äºç¬¬2ã第3ç§æ¹æ³éè¦ä¼ éä¸ä¸æï¼ä¹å°±æ¯ç±»åå对象åï¼ï¼æ以addEventListeneråremoveEventListeneråºè¯¥æ3个åæ°ï¼ææ¯è¿æ ·è®¾è®¡çï¼
ããfunction addEventListener( $evtName , $handler , $scope = null )
ãã第1个åæ°è¡¨ç¤ºäºä»¶åï¼å符串类å
ãã第2个åæ°è¡¨ç¤ºåè°å½æ°åï¼å符串类å
ãã第3个åæ°$scopeæ¯ä¸ä¸æç¯å¢ï¼ä¸å ±æ3ç§ç±»åï¼nullè¡¨ç¤ºä¼ å ¥çhandlerå½æ°æ¯ä¸ä¸ªå ¨å±å½æ°ï¼å符串类åè¡¨ç¤ºä¼ å ¥çhandlerå½æ°æ¯scopeç±»çéæå½æ°ï¼å¯¹è±¡ç±»åè¡¨ç¤ºä¼ å ¥çscopeæ¯ä¸ä¸ªå¯¹è±¡ï¼handlerå½æ°æ¯å¯¹è±¡çä¸ä¸ªæ¹æ³ã
ããfunction fire( $evtName , $params = null )
ããè¿ä¸ªæ¹æ³å ï¼ä¼è¯»ååºææååºevtNameçhandlerï¼ç¶åå¤æå®å¯¹åºçscopeï¼å¦ææ¯nullï¼åç¨æ¬æ第1ç§æ¹æ³åè°ï¼å¦ææ¯å符串ï¼åç¨æ¬æ第2ç§æ¹æ³åè°ï¼å¦ææ¯å¯¹è±¡ï¼åç¨æ¬æ第3ç§æ¹æ³åè°ãè¿æ ·ï¼ä¸ä¸ªPHPçäºä»¶æ¨¡åå°±å¯ä»¥å®ç°äºï¼èä¸å¯ä»¥å°åè°å½æ°æ¾å¨æ个对象ä¸ã
温馨提示:答案为网友推荐,仅供参考
第1个回答 2016-12-27
call_user_func()