PHP:调用函数时指定参数变量名称?

时间:2013-10-03 18:04:52

标签: php

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

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

3 个答案:

答案 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 Functions arguments

当您决定切换订单时,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被覆盖)。