这似乎是一个学术或无用的话题,但我很好奇。
使用PHP开发网页时,我经常需要调用带有多个参数的函数。我经常需要查找函数的规范(在php.net或我的包含文件中,如果它是我定义的函数),以提醒自己变量是什么,它们的顺序是什么,默认值是什么,等等我想你们很多人都可以与此有关。
这样定义的函数:
function do_something_awesome ($people_array, $places_recordset, $num_cycles, $num_frogs,
$url = '?default=yes', $submit_name = 'default_submit_label') {
...
}
调用时,可能如下所示:
$result = do_something_awesome($names, $rsTowns, $c, $f);
我的问题是:我想以一种方式编写我的代码,让我想起在这样的函数调用期间哪个参数对应于每个变量。如下调用函数是否合法?
$result = do_something_awesome($people_array = $names, $places_recordset = $rsTowns,
$num_cycles = $c, $num_frogs = $f);
如果不是在PHP中,是否有其他语言可以通过这种方式进行方法调用?
答案 0 :(得分:1)
如何使用对象作为唯一参数:
function my_function($arguments) {
if (!is_object($arguments)) throw new Exception();
$default_values = array('arg1' => 'value1', 'arg2' => 'value2');
foreach ($default_values as $key => $default_value)
if (!isset($arguments->$key)) $arguments->$key = $default_value;
## do the job ##
}
## and then
$my_arguments = new stdClass();
$my_arguments->arg2 = 'some_value';
my_function($my_arguments);
答案 1 :(得分:1)
回答你的第一个问题:
我的问题是:我想以一种方式编写我的代码,让我想起在这样的函数调用期间哪个参数对应于每个变量。
AFAIK,许多PHP程序员通过传递关联数组作为唯一参数来完成它。但是,您必须在被调用函数内部执行自己的变量检查。
$result = do_something_awesome(array(
'people_array' => $names,
'places_recordset' => $rsTowns,
'num_cycles' => $c,
'num_frogs' => $f
));
至于:
如下调用函数是否合法?
它不会导致任何PHP错误,但您实际做的是:
$result = do_something_awesome( expression, expression, expression, expression );
当您决定切换订单时,PHP不会知道将$people_array = ...
或$num_frogs = ...
放在相应的位置。此外,正如DCoder所说,这些表达式实际上发生在当前范围内,并且会在不让您知道的情况下更改任何预先存在的变量。
答案 2 :(得分:0)
你可以尝试一下:
$bas = 'This is passed to the function.';
$bar = 'This will be modified.';
function foo($bar)
{
echo $bar;
}
foo($bar = $bas);
echo $bar;
此脚本的输出为'This is passed to the function.This is passed to the function.'
。所以就像DCoder说的那样,虽然你可以使用它们并且它是完全合法的,但如果你有其他变量与函数参数同名,这将覆盖它们(在这种情况下原始$bar
被覆盖)。