簡體   English   中英

人們為什么在PHP函數中設置默認參數?

[英]Why do people set default parameters in PHP functions?

例:

function example($x = "")
{
    Do something
}

$ x默認情況下是否為空? 為什么要明確設置?

$ x默認情況下是否為空?

如果未指定默認值,則$x默認情況下不是空字符串,而是未定義的變量。 ""NULL或未定義之間有區別。
但是,設置默認值可使您在調用函數時忽略該參數,而不會引發警告。

<?php
function test1($x = "DEFAULT") {
    echo $x;
}
function test2($x) {
    echo $x;
}

// Call each without the parameter $x:    
test1();
// DEFAULT

test2();
// Output:
PHP Warning:  Missing argument 1 for test2(), called in /home/mjb/test.php on line 10 and defined in /home/user/test.php on line 5
PHP Notice:  Undefined variable: x in /home/user/test.php on line 6

主要原因是在聲明中設置默認值會使參數成為可選參數:

$a = example();
$b = example(5);

原因之一是,當您重用該函數時,不必顯式設置變量。 當默認設置為true或false時,會發生很多情況。 這樣,函數似乎可以像其他oop語言一樣重載。 如果該變量不包含默認值,則始終必須設置該值,否則函數將引發錯誤,但是,通過將變量設置為默認值,則不必一定要設置變量。 希望對大家有所幫助:)

我使用默認值的原因之一是使我在調用函數時不必聲明變量,即:

function something(debug=false){
 doing something here;
 if ($debug === true){
  echo 'SOMETHING';
 }else{
  return true;
 }
}

這樣,您可以調試一些事情,只需將變量添加到函數調用中即可,但是如果不添加變量,函數將假定它為false。 這在我的$ _GET安全功能中很有價值,當我打開調試功能時,該功能會用來加密$ _GET字符串,$ _ GET會被解碼並作為數組轉儲到

<pre>print_r($_GET);</pre>

這樣我就可以看到$ _GET中的值,但是該字符串仍在地址欄中進行了加密。

希望能有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM