在函数调用中设置变量值 - 我没有看到这么多,这被认为是好的做法吗?
function myUpdate($status){
...
}
myUpdate($status = 'live');
我个人喜欢它,因为它更具描述性。我反过来更频繁地看到它,即在函数定义中指定一个默认值。
答案 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);
有一些好的做法可以让记忆方法参数更容易:
答案 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);