在函數調用中設置變量值 - 我沒有看到這麼多,這是否被認爲是良好的做法?PHP - 在函數參數中賦值 - 好的做法?
function myUpdate($status){
...
}
myUpdate($status = 'live');
我個人很喜歡它,因爲它是更具描述性的。我反過來更頻繁地看到它,即在函數定義中分配一個默認值。
在函數調用中設置變量值 - 我沒有看到這麼多,這是否被認爲是良好的做法?PHP - 在函數參數中賦值 - 好的做法?
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);
有一些好的做法可以做,使記憶方法的參數更容易:
它不是代碼混淆。如果在函數中有3個bool參數,那麼以描述性方式添加變量實際上會提高可讀性。 –
@Darhazer它改善了可讀性,直到有人改變了方法的簽名。從那以後,這種做法會主動誤導程序員關於實際方法簽名。 – phihag
所有的開玩笑,認真爲什麼你使用它?你必須認識到它與分配默認值完全不同。你在這裏做的是將該值賦給一個變量,然後將該變量傳遞給該函數。結果是,在函數調用之後,$status
變量仍然被定義。
myUpdate($status = 'live');
echo $status; // "live"
即使這是你想要什麼,我會說這不僅僅是分裂出來的兩行描述少。
那麼,默認值是不同的東西。
// 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);
不,這不是因爲它的額外的代碼。嘗試:
myUpdate('live' /*status*/, 42 /*maxTries*/);
或者,如果你真的想命名的參數,你可以使用地圖:
myUpdate(array(
'status' => 'live'
));
一般而言,這會殺了類型安全,但PHP沒有任何,反正。
哇,這個工作嗎? :O – Rijk
你知道這樣做不會以任何方式影響函數的執行,只在調用範圍中分配一個局部變量? –
@Rijk是的,它的工作原理是因爲PHP中賦值的結果是分配的值。 – Phil