ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

在PHP中动态使用函数原型

2019-07-13 10:27:52  阅读:166  来源: 互联网

标签:php function-calls


我正在用PHP编写一个构造,其中解析器确定动态调用哪个函数,类似这样:

// The definition of what to call
$function_call_spec = array( "prototype"  => "myFunction", 
                             "parameters" => array( "first_par"  => "Hello",
                                                    "second_par" => "World"));

// Dispatch
$funcPrototype = $function_call_spec["prototype"];
$funcPrototype(); // Here we call function 'myFunction'.

这一切都很好,花花公子.但现在是下一步,传递参数,我不知道是否有可能按照我想要的方式进行.它永远不会让我惊讶,但是这些天脚本语言可以做什么,所以这里是:

可以将参数传递给函数,如下所示:

// Here we call function 'myFunction' with the array of parameters.
$funcPrototype( $function_call_spec["parameters"] );

但是,我想用明确的参数等正确地声明’myFunction’:

function myFunction( $first_par, $second_par )
{

}

接下来的问题是 – 有没有办法通过循环参数数组动态地将参数传递给函数?

澄清一点,我不想这样做:

$funcPrototype( $function_call_spec["parameters"]["first_par"],
                $function_call_spec["parameters"]["second_par"]  );

因为这需要我的代码静态地知道关于myFunction的细节,这违背了整个想法.

相反,我想以某种方式这样做:

// Special magic PHP function which can be used for invoking functions dynamically
InvokeFunction( $funcPrototype, $function_call_spec["parameters"] );

然后调用myFunction,并将数组中的所有参数传递给原型中的每个单独的参数变量.

欢迎任何评论.

问候.

/ R

PS:这篇文章中的所有代码都没有经过错别字等的测试.

解决方法:

你应该使用call_user_func_array,它可以调用任何函数或方法,并从数组中获取参数.

或者你也可以使用ReflectionFunction::invokeArgs,但是除了你已经将这个类用于其他方法(比如检查你调用的函数是否接受适当数量和类型的参数)之外,没有比call_user_func_array好的方法.

标签:php,function-calls
来源: https://codeday.me/bug/20190713/1448777.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有