我想分配一個變量,只有它尚未分配。 PHP做什麼的方式是什麼?PHP是否與|| =運算符等價?
$result = null;
$result ||= check1();
$result ||= check2();
$result ||= "default";
我檢查了standard operators和is_null功能,但似乎並沒有做上述操作的簡單方法。
我想分配一個變量,只有它尚未分配。 PHP做什麼的方式是什麼?PHP是否與|| =運算符等價?
$result = null;
$result ||= check1();
$result ||= check2();
$result ||= "default";
我檢查了standard operators和is_null功能,但似乎並沒有做上述操作的簡單方法。
isset()
是這樣做的常用方法:
if (!isset($blah)) {
$blah = 'foo';
}
注:您可以分配到null
一個變量,它會被分配。這將產生與isset()
和is_null()
不同的結果,因此您需要明確「未分配」的含義。請參閱Null vs. isset()。這也是您需要小心執行自動類型轉換的一種情況,即根據所需結果使用!=/==
或===/!==
。
您也可以使用布爾速記(這是Perl ||=
運算符)。從PHP 5.2.x開始,並沒有像您所說的操作符。在Perl:
$a ||= $b;
等同於:
$a = $a || $b;
你可以做第二種形式在PHP但是PHP有大約type juggling一些時髦的規則。見Converting to boolean:
當轉換爲boolean,所述 以下值被認爲是FALSE:
- 的boolean
FALSE
本身- 的integer 0(零)
- 的float 0.0(零)
- 空的string和string 「0」
- 一個array用零元素
- 一個object零成員變量(PHP 4只)
- 特殊類型
NULL
(包括尚未設定的變量)從空標籤創建- SimpleXML對象
其他每個值都被視爲TRUE(包括任何資源)。
所以經過:
$a = 0;
$a = $a || 5;
$一個就等於5.同樣:
$a = 0;
$b = '';
$c = $a == $b; // true
$d = $a === $b; // false
你要注意這些事情。
如何使用嵌套的三元運算符?
對我來說,這是處理您的問題最簡單的方法。因爲你可以使用嵌套的三元運算符,所以如果需要的話你應該能夠添加更多的檢查。
$var = isset($var) ? $var : ($i=check1()) ? $i : ($i=check2()) ? $i : "default" ;
這幾乎是相同數量的代碼,它應該工作..除非我誤解了你。如果是這種情況,我很抱歉。
與您發佈爲例原來的代碼比較,長度幾乎一樣:
$result = null; $result ||= check1(); $result ||= check2(); $result ||= "default";
- vs -
$var = isset($var) ? $var : ($i=check1()) ? $i : ($i=check2()) ? $i : "default" ;
嵌套三元運營商可以是一個有點混亂,所以在這裏你有意見有它:
// Is $var set?
$var = isset($var) ?
// TRUE: It is, use $var
$var :
// FALSE: $var is not set, run check1
($i=check1()) ?
// TRUE: the function check1 returned valid data
$i :
// FALSE: the function check1 returned null or false, run check2
($i=check2()) ?
// TRUE: the function check2 returned valid data
$i :
// FALSE: the function check1 returned null or false, set default value
"default" ;
isset($foo) || $foo = 'bar';
我還沒試過呢,但是想玩多少年了。
從PHP 5.3,你可以使用:
$result = $result ?: check1();
我想出了這個功能,它有小人了無用的未定義的變量聲明的一個附帶好處。它足夠接近Javascript對我的行爲:
function default_value(&$var, $default) {
return isset($var) ? $var : $default;
}
$want_something = default_value($_POST['mightbeunset'], false);
$ a = isset($ a)? $ a:$ b;是第一個代碼示例 – niteria 2009-07-19 08:57:45
$ a = 0的簡寫; $ a = $ a || 5; echo $ a; //布爾值TRUE – eyelidlessness 2009-07-19 09:17:51
奇怪... echo $ a == 5? '真假'; // true - but - echo $ a - 1; // 0 – eyelidlessness 2009-07-19 09:20:53