非常规传递论点的奇怪行为

时间:2014-07-23 15:05:59

标签: php function default-arguments

我在代码中调用函数时意外复制了函数头,并且由于某种原因代码仍然有效。这是为什么?

$data = Utilities::multi_curl($substance_year_combo_groups, $files = false, $download_folder = null, $file_name = null, $pop = false, $handle_key = 'results');

显然,它应该是这样写的:

$data = Utilities::multi_curl($substance_year_combo_groups, false, null, null, false, 'results');

但我可以在调试中看到最后一个参数确实是'results'。纯粹的变量赋值不应该被评估为true吗?

默认情况下,$handle_key null为{{1}}。

3 个答案:

答案 0 :(得分:1)

评估参数,并传递这些评估的结果。

请记住,在PHP分配中有一个"返回值",这是分配的值。

$foo = 'bar';
echo $foo;
$result = some_function($foo = 'blah');
echo $foo;

此代码将回显barblah,并将blah传递给some_function作为参数。

这是允许的完全相同的机制:

$a = $b = $c = $d = 42;

开始工作,并将42分配给所有四个变量。

答案 1 :(得分:1)

赋值操作的结果是赋值。例如,我可以这样做:

if($result = do_something_that_may_fail()) {}

无论do_something_that_may_fail()方法返回什么,都会被分配给$result,如果没有任何评估为false,则会执行if块。副产品是您仍然可以在$result块内引用if

在方法调用中发生同样的事情,正在分配值,并且值本身将被发送到方法。

答案 2 :(得分:1)

已经回答,但要包含PHP: Assignment Operators Manual

的引用
  

赋值表达式的值是指定的值。也就是说,“$ a = 3”的值是3。