在函数调用中设置变量值-我没有看到很多,这被认为是好的做法吗?
function myUpdate($status){
...
}
myUpdate($status = 'live');
我个人喜欢它,因为它更具描述性。我更经常看到相反的情况。
这是一个非常糟糕的主意,因为它基本上是代码混淆。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在高亮处显示函数的签名
- 如果一个函数有很多描述某种状态的参数,请考虑将其移动到一个*对象*t(而不是保存状态)
- 如果你的函数只需要很多参数,让它使用一个数组来存放所有非必要的参数。这也允许方法调用者完全不用担心大量的选项,她只需要知道她感兴趣的选项。
别开玩笑了,说真的,你为什么要用它?你必须意识到这和分配一个默认值是完全不同的。你在这里做的是将值赋给一个变量,然后将这个变量传递给函数。结果是,在函数调用之后,$status
变量仍然是定义的。
myUpdate( $status = 'live' );
echo $status; // "live"
即使这是你想要的,我也会说不那么具有描述性,而只是分成两行。
不,不是因为它是额外的代码。试一试:
myUpdate('live' /*status*/, 42 /*maxTries*/);
或者如果你真的想要命名参数,你可以使用map:
myUpdate(array(
'status' => 'live'
));
通常情况下它会取消类型安全,但是PHP没有。
嗯,默认值是不同的。
// 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');
一样调用它,你将在调用函数的作用域中保留值为live
的$status
var,而不是在它内部。
但是我觉得这样更容易读懂:
$status = 'live';
myUpdate($status);