¡¾Ð¡Ðò£ºÎªÊ²Ã´¡°calluserfuncarray¡±³ÉΪPHP¿ª·¢Õߵıر¸¹¤¾ß¡¿ÔÚPHP¿ª·¢µÄÌìÏÂÀº¯ÊýŲÓõķ½·¨¶àÖÖ¶àÑù£¬´ÓÖ±½ÓŲÓõ½»Øµ÷º¯Êý£¬ÔÙµ½ÄäÃûº¯Êý£¬ÖÖÖÖ×ËÊÆ²ã³ö²»Çî¡£¶øÔÚÕâЩŲÓü¼ÇÉÖУ¬ÓÐÒ»¸ö¹ÅÀ϶øÇ¿Ê¢µÄ¹¤¾ß¡ª¡ª¡°calluserfuncarray¡±¡£
ËäÈ»Ãû×ÖÂÔÏÔ·±Ëö£¬µ«ËüÔÚʵÏÖ¶¯Ì¬»¯¡¢Áýͳ»¯ºÍ¸ß¸´ÓÃÐÔ·½Ã棬ȴÊDz»¿É»òȱµÄºÃ°ïÊÖ¡£
ÏëÏóһϣ¬ÄãÓÐÒ»×麯Êý»òÕßÒªÁ죬Äã²¢²»ÖªµÀÏêϸ»áŲÓÃÄĸöº¯Êý£¬»òÕߣ¬ËüÃǵIJÎÊýÔÚ³ÌÐòÔËÐÐʱ²ÅÈ·¶¨£¬ÕâÖÖÐèÇóÔÚÏÖ´úWebÓ¦Óᢲå¼þϵͳ¡¢ÊÂÎñÇý¶¯¼Ü¹¹Öо³£·ºÆð¡£´Ëʱ£¬Ö±½ÓŲÓú¯Êý±äµÃ´Ö±¿ÇÒ²»ÎÞа£¬ÄãÐèÒªÒ»ÖÖ²½·¥£¬Èú¯ÊýŲÓñäµÃÏñÆ´¼¯»ýľһÑù×ÔÓÉÎÞа¡£
¡°calluserfunc_array¡±ÕýÊǽâ¾öÕâ¸öÎÊÌâµÄ×î¼Ñ¼Æ»®¡£
Õâ¸öº¯ÊýµÄ½¹µãÓÅÊÆÔÚÓÚ£ºËüÔÊÐíÄ㽫һ¸öº¯ÊýÃû£¨»òÀàµÄÒªÁìÃû£©×÷Ϊ²ÎÊýת´ï£¬»¹¿ÉÒÔת´ïÒ»¸ö²ÎÊýÊý×飬´Ó¶øÒ»´ÎÐÔŲÓöÔÓ¦µÄº¯Êý£¬ÇÒ²ÎÊý¶¼ÓÉÊý×éÃ÷È·¡£ÕâÖÖ·½·¨Í»ÆÆÁ˹Ű嶨ËÀµÄŲÓ÷½·¨£¬Îª¿ª·¢ÕßÌṩÁ˼«´óµÄ×ÔÓɶȣ¬Ê¹´úÂë±äµÃÔ½·¢Ä£¿é»¯¡¢¿Éά»¤¡¢¸üÒ×À©Õ¹¡£
¡¾¡°calluserfunc_array¡±µÄ»ù´¡Ó÷¨ÆÊÎö¡¿ÔÚÉîÈëÏÖʵӦÓÃ֮ǰ£¬ÏÈÏàʶËüµÄ»ù±¾Ó÷¨ºÍÓÃÒâ¡£ÎÒÃÇÖªµÀ£¬Í¨Ë׺¯ÊýŲÓÃÏñÕâÑù£º
funcName($arg1,$arg2,$arg3);
µ«µ±º¯ÊýÃû´æ·ÅÔÚ±äÁ¿ÖУ¬»òÕß²ÎÊýÔÚÊý×éÀÊÖ¶¯½â°ü±äµÃ·±Ëö¡£Õâʱ£¬¡°calluserfunc_array¡±ÄܰïÄãÇáËɸ㶨£º
call_user_func_array($functionName,$parameters);
ÕâÀ$functionName¿ÉÒÔÊÇ×Ö·û´®ÐÎʽµÄº¯ÊýÃû£¬Ò²¿ÉÒÔÊÇÊý×éÐÎʽ£¬´ú±íÀàµÄÒªÁì¡£$parametersÊÇÒ»¸ö²ÎÊýÊý×飬Ëü»á±»Öð¸ö´«Èëµ½º¯ÊýÖС£
functiongreet($name,$day){echo"Hello,$name!½ñÌìÊÇ$day¡£";}$args=['СÃ÷','ÐÇÆÚÒ»'];call_user_func_array('greet',$args);
Õâ¸ö¼òÆÓʾÀýÕ¹ÏÖÁËÆäǿʢµÄ²ÎÊýת´ïÄÜÁ¦£¬ÌØÊâÊÇÔÚ²ÎÊýÊýÄ¿¶¯Ì¬×ª±äÊ±ÌØÊâÀû±ã¡£
¡¾¸ß¼¶Ó¦ÓãºÁ¬Ïµ±Õ°ü¡¢¹¤¾ßÓë¶à̬ʵÏÖ¶¯Ì¬µ÷Àí¡¿Óá°calluserfunc_array¡±²»µ«¿ÉÒÔŲÓÃͨË׺¯Êý£¬»¹ÄÜŲÓþ²Ì¬ÒªÁì¡¢¹¤¾ßÒªÁ죬ÉõÖÁÄäÃûº¯Êý¡£ºÃ±È£º
classCalculator{publicstaticfunctionadd($a,$b){return$a+$b;}}$result=call_user_func_array(['Calculator','add'],[5,3]);echo$result;//8$obj=newCalculator();$result2=call_user_func_array([$obj,'add'],[10,15]);echo$result2;//25$func=function($msg){echo$msg;};call_user_func_array($func,['ÕâÊÇÒ»¸öÄäÃûº¯Êý']);
ÕâÑù£¬Å²Ó÷½·¨¼«ÆäÎÞа£¬Ë³Ó¦ÖÖÖÖÖØ´ó³¡¾°£¬´Ó¿ò¼ÜÉè¼Æµ½ÊÂÎñ´¦Öóͷ££¬¶¼ÄÜÓÃËüÀ´ÊµÏÖ¡£
¡¾×¢ÖØÊÂÏ²ÎÊýÆ¥ÅäºÍÐÔÄÜ¿¼Á¿¡¿ËäÈ»¡°calluserfunc_array¡±¹¦Ð§Ç¿Ê¢£¬µ«Ò²Ðè×¢ÖØÒ»Ð©Ï¸½Ú¡£
²ÎÊýÀàÐÍÆ¥Å䣺´«ÈëµÄÊý×é²ÎÊýÒªÓëÄ¿µÄº¯ÊýµÄ²ÎÊýÀàÐÍÎÂ˳ÐòÒ»Ö£¬²»È»¿ÉÄÜÍÉ»¯»ò»ñ×ÔÂúÁÏÖ®ÍâµÄЧ¹û¡£ÐÔÄÜÎÊÌâ£ÔÃÄ¿ÎŲÓá°calluserfunc_array¡±¶¼»á±£´æÒ»¶¨µÄÐÔÄÜ¿ªÏú£¬ÓÈÆäÊÇÔÚ¸ßÆµÅ²Óó¡¾°ÖУ¬Òª×¢ÖØ×èÖ¹ÀÄÓá£
×ÛÉÏ£¬ÕÆÎÕ¡°calluserfunc_array¡±ÄÜÈÃÄãµÄ´úÂë¸ü¾ßµ¯ÐÔ£¬ÔöÇ¿¶ÔÎ´ÖªÖØ´óÇéÐεÄÓ¦±äÄÜÁ¦¡£ÎÒÃǽ«ÉîÈë̽ÌÖËüÔÚ´óÐÍÓ¦ÓÃÖеÄÓÅ»¯¼¼ÇɺÍʵս°¸Àý£¬×ÊÖúÄãʵÏÖ¸ßЧ¿ÉÀ©Õ¹µÄPHP¼Ü¹¹Éè¼Æ¡£
¡¾¶¯Ì¬¿ò¼ÜÓë²å¼þ»úÖÆÖеġ°calluserfuncarray¡±¡¿ÔÚÏÖ´úPHP¿ª·¢ÖУ¬¶¯Ì¬¿ò¼ÜºÍ²å¼þ»úÖÆÔ½À´Ô½ÆÕ±é¡£ÈçWordPress¡¢LaravelµÈƽ̨£¬¶¼´ó×ÚÒÀÀµÓڻص÷¡¢ÊÂÎñ¼àÌý£¬ÉõÖÁ²å¼þ¼ÓÔØÓëŲÓûúÖÆ¡£ÕâЩͷÄÔ±³ºó£¬¶¼Àë²»¿ª¡°calluserfuncarray¡±µÄÉñÆæ×÷Óá£
¾ÙÀýÀ´Ëµ£¬Ò»¸ö²å¼þϵͳÈôÊÇÔÊÐíÓû§½ç˵¹³×Ó¡¢ÊÂÎñ´¦Öóͷ£º¯Êý£¬³ÌÐòÐèҪƾ֤ÉèÖö¯Ì¬Å²ÓÃÖݪֲî±ðµÄº¯Êý¡£´Ëʱ£¬²»Ô¤ÏÈÓ²±àÂëÿһ¸öŲÓ㬶øÊǰѺ¯ÊýÃûºÍ²ÎÊý´æ´¢ÔÚÉèÖÃÖÐÔÙÖðÒ»ÔËÐУ¬¾Í³ÉÁ˱ØÐèµÄÑ¡Ôñ¡£ÊµÖÊÉÏ£¬¾ÍÊÇÓá°calluserfunc_array¡±ÊµÏÖ²ÎÊýµÄ¶¯Ì¬×ª´ïºÍº¯ÊýµÄ¶¯Ì¬Å²Óá£
//²å¼þ×¢²á±í$hooks=['init'=>['plugin_init',['²ÎÊý1','²ÎÊý2']],'save'=>['PluginSaver::save',[$data]]];//Ö´Ðй³×Óforeach($hooksas$hook=>$callable){list($func,$params)=$callable;call_user_func_array($func,$params);}
ÕâÑù£¬Ê¹µÃÕû¸öϵͳ¾ß±¸³¬Ç¿µÄÀ©Õ¹ÐÔ£¬Ö»ÐèÔÚÉèÖÃÖнç˵º¯ÊýÃûºÍ²ÎÊý£¬½¹µã´úÂëÎÞÐëÈκα任¡£
¡¾Éè¼Æ¿ÉÉèÖÃÐÔÇ¿µÄµ÷Àíϵͳ¡¿Ê¹Óá°calluserfunc_array¡±£¬Äã¿ÉÒÔÉè¼Æ³ö¸ß¶È¿ÉÉèÖõĵ÷Àíϵͳ¡£ÀýÈ磬ij¸öÊý¾Ý´¦Öóͷ£¿ò¼Ü£¬ÔÊÐíÓû§×Ô½ç˵´¦Öóͷ£º¯Êý»òÒªÁ죬ȻºóÔÚµ÷ÀíʱÅúÁ¿Å²Óãº
$tasks=[['CustomHandler','processData',[$data]],['AnotherHandler','handle',[$someData]],];foreach($tasksas$task){list($class,$method,$args)=$task;call_user_func_array([new$class,$method],$args);}
Ö»Ðèά»¤ÉèÖü´¿ÉÀ©Õ¹Õû¸öϵͳ£¬¼«´ó¼ò»¯Î¬»¤ÄѶȣ¬Ò²Àû±ãδÀ´À©Õ¹¡£
¡¾Á¬Ïµ·´ÉäÓë¡°calluserfuncarray¡±µÄÓÅ»¯¼¼ÇÉ¡¿ËäÈ»¡°calluserfuncarray¡±Ç¿Ê¢£¬µ«ÔÚ¶ÔÐÔÄÜÃô¸ÐµÄ³¡ºÏ£¬¿ÉÒÔÁ¬ÏµPHP·´ÉäReflectionFunction¡¢ReflectionMethod¾ÙÐÐÓÅ»¯¡£Í¨¹ýÌáǰ·´É䣬»ñÈ¡²ÎÊýÐÅÏ¢£¬ïÔ̲ÎÊýÀàÐͼì²âºÍ°ó¶¨µÄ¿ªÏú£¬´Ó¶øÌáÉýŲÓÃЧÂÊ¡£
$reflection=newReflectionFunction('greet');$parameters=$reflection->getParameters();//Ô¤´¦Öóͷ£²ÎÊý»ò»º´æ·´É乤¾ßcall_user_func_array($reflection,$args);
ÕâÖÖ¼¼ÇÉ£¬ÊʺÏÔÚ¿ò¼Ü»ò¸ßÐÔÄÜÇéÐÎÖÐʹÓã¬ÎªÖØ´óµÄ¶¯Ì¬µ÷ÀíÌṩ°ü¹Ü¡£
¡¾¡°calluserfuncarray¡±ÔÚ΢ЧÀÍÓëÔ¶³ÌŲÓÃÖеÄÓ¦Óá¿ÔÚ΢ЧÀͼܹ¹ÖУ¬Ð§ÀÍÖ®¼äµÄŲÓþ³£ÒÔ½Ó¿Ú½ç˵Ϊ»ù´¡£¬Í¨¹ýRPC»òHTTPAPIʵÏÖ¡£¶øÔÚPHPÖУ¬Ò²¿ÉÒÔÓÃËüÏàËÆµÄ˼Ð÷£¬Óá°calluserfuncarray¡±ÊµÏÖŲÓÃÊðÀí£¬¶¯Ì¬µ÷Åä²î±ðÄ£¿é£¬ÉõÖÁʵÏÖÔ¶³ÌЧÀÍÄ£Äâ¡£
functionremoteCall($serviceName,$methodName,$params){//α´úÂ룺ŲÓÃÔ¶³ÌЧÀÍ$service=getServiceInstance($serviceName);returncall_user_func_array([$service,$methodName],$params);}
ÔÆÔÆÒ»À´£¬ÏµÍ³µÄÀ©Õ¹ÐÔºÍÎÞаÐÔ´ó´óÔöÇ¿£¬Ò²¸üÌù½üÏÖ´ú΢ЧÀÍÍ·ÄÔ¡£
¡¾Î´À´Õ¹Íû£ºÁ¬ÏµÌìÉúʽ±à³ÌÓë¡°calluserfuncarray¡±ÊµÏÖÖÇÄܵ÷Àí¡¿Ëæ×ÅAIºÍ×Ô¶¯»¯ÊÖÒÕµÄÉú³¤£¬Î´À´»òÐí»á·ºÆð¿ÉÒÔ×Ô¶¯ÌìÉúº¯ÊýŲÓÃÉèÖõŤ¾ß¡£¶ø¡°calluserfuncarray¡±×÷Ϊµ÷Àí½¹µã£¬¿ÉÒÔÓëÕâЩ¹¤¾ßÁ¬Ïµ£¬ÊµÏÖ¡°×ÔÎÒÉèÖá¢×ÔÎÒÓÅ»¯¡±µÄÖØ´óŲÓÃÁ´Ìõ¡£
»ØÊס°calluserfunc_array¡±µÄÓ¦ÓÃÀú³Ì£¬Ëü´Ó¼òµ½·±£¬´Ó¼òµ¥Å²Óõ½ÖØ´óµ÷Àí£¬Öð²½³ÉΪPHPÖв»¿É»òȱµÄµ÷ÀíÀûÆ÷¡£ÎÞÂÛÊÇʵÏÖÎÞа²å¼þ»úÖÆ¡¢¶¯Ì¬µ÷Àí£¬ÕÕ¾É΢ЧÀÍÕûºÏ£¬Ëü¶¼ÄÜΪÄãÌṩ×îÊÊÓá¢×îÎÞаµÄ½â¾ö¼Æ»®¡£¼ÌÐøÉîÈë̽Ë÷£¬Ò»¶¨»á·¢Ã÷Ëü´ø¸øÄãµÄ²»µ«½öÊÇÒ»¸öº¯Êý£¬¸üÊÇÒ»ÖÖÎÞа¡¢¸ßЧµÄ˼Ë÷·½·¨¡£
ÈôÊÇÄãÏ£Íû×·Çó¸ü¸ßµÄ¿ª·¢Ð§Âʺͼܹ¹ÓÅÑÅ£¬¡°calluserfunc_array¡±¾ø¶ÔÖµµÃÉîÍÚÓëʵ¼ù¡£ÏàÐÅÔÚδÀ´µÄPHP·ÉÏ£¬Äã»áÔ½À´Ô½ÒÀÀµËü£¬°ÑÖØ´ó±äµÃ¼òÆÓ£¬ÈÃÄãµÄÏîÄ¿»À·¢³ö¸üÇ¿µÄÉúÃüÁ¦¡£