3

这似乎是一个学术或无用的话题,但我很好奇。

使用 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 中,是否有其他语言可以以这种方式进行方法调用?

4

3 回答 3

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);
于 2013-10-03T18:25:11.390 回答
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 函数参数

当您决定改变它们的顺序时,PHP 不会知道将它们放在$people_array = ...或放在它们相应的位置。$num_frogs = ...此外,正如 DCoder 所说,这些表达式实际上发生在当前范围内,并且会在不让您知道的情况下更改任何预先存在的变量。

于 2013-10-03T20:20:20.440 回答
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被覆盖了)。

于 2013-10-03T18:16:08.290 回答