PHP - 在函数参数中赋值 - 良好实践?

时间:2011-09-16 10:05:37

标签: php

在函数调用中设置变量值 - 我没有看到这么多,这被认为是好的做法吗?

function myUpdate($status){
    ...
}

myUpdate($status = 'live');

我个人喜欢它,因为它更具描述性。我反过来更频繁地看到它,即在函数定义中指定一个默认值。

4 个答案:

答案 0 :(得分:5)

这是一个非常糟糕的主意,因为它基本上是代码混淆。 php 支持关键字参数,这可能导致奇怪的东西。一个很好的例子:

function f($a, $b){
    echo 'a: ' . $a . "\n";
    echo 'b: ' . $b . "\n";
}
f($b='b-value', $a='a-value');

此程序不仅输出

a: b-value
b: a-value

还定义全局上下文中的变量$b$a。这是因为

f($b='b-value', $a='a-value');
// is the same thing as ...
$b = 'b-value';
$a = 'a-value';
f($b, $a);

有一些好的做法可以让记忆方法参数更容易:

  • 配置编辑器/ IDE 以在高亮显示功能的签名。
  • 如果某个函数有很多描述某种状态的参数,请考虑将其移动到* objec * t(代之以保存状态)
  • 如果你的函数只需要很多参数,那么对于所有非必要参数,请使用数组。这也让方法调用者不必担心众多选项,她只需知道她感兴趣的选项。

答案 1 :(得分:2)

除了开玩笑,你真的为什么要用它?你必须意识到它与分配默认值完全不同。你在这里做的是将值赋给变量,然后将该变量传递给函数。结果是,在函数调用之后,仍然定义了$status varialbe。

myUpdate( $status = 'live' );
echo $status; // "live"

即使这是你想要的,我也会说它描述而不仅仅是将它分成两行。

答案 2 :(得分:2)

不,这不是因为它是额外的代码。尝试:

myUpdate('live' /*status*/, 42 /*maxTries*/);

或者,如果您真的想要命名参数,可以使用地图:

myUpdate(array(
    'status' => 'live'
));

通常它会杀死类型安全,但无论如何PHP都没有。

答案 3 :(得分:1)

嗯,默认值是不同的东西。

// if you call myUpdate without argument, it will have $status with value live
function myUpdate($status = 'live'){

}

致电:

myUpdate($status = 'live');

相当于:

myUpdate('live');

唯一不同的是,在通话结束后,如果您将其称为myUpdate($status = 'live');,则会在您调用该功能的范围内保留$status var和值live,而不是在里面。

但恕我直言,它的可读性更高:

$status = 'live';
myUpdate($status);