簡體   English   中英

php 簡寫 if

[英]php shorthand if

我很難理解為什么當我期待'FOO1'時下面的代碼會回顯'FOO2'

$tmp = 'foo1';
echo $tmp == 'foo1' ? 'FOO1' : $tmp == 'foo2' ? 'FOO2' : 'NO FOO';
$tmp = 'foo1';
echo $tmp == 'foo1' ? 'FOO1' : ($tmp == 'foo2' ? 'FOO2' : 'NO FOO');

基本上 PHP 將其分解為:

$tmp = 'foo1';
echo ($tmp == 'foo1' ? 'FOO1' : $tmp == 'foo2') ? 'FOO2' : 'NO FOO';

括號中的部分將返回FOO1其評估結果為TRUE所以第二個條件語句本質上是TRUE? 'FOO2': 'NO FOO'; TRUE? 'FOO2': 'NO FOO'; – 反過來總是評估為'FOO2'

注意:這與 C 三元運算符關聯性不同

$tmp = 'foo1';
if($tmp == 'foo1') echo 'FOO1';
else if($tmp == 'foo2') echo 'FOO2';

正如您剛剛發現的那樣,三元運算符是一個混亂的雷區,尤其是當您嘗試 嵌套 堆棧它們時。 不要這樣做!

編輯:
PHP 手冊還建議不要堆疊三元運算符:-

建議您避免“堆疊”三元表達式。 在單個語句中使用多個三元運算符時 PHP 的行為並不明顯:

請參閱PHP 手冊此頁面上的示例 3

$tmp = 'foo1';
echo $tmp == 'foo1' ? 'FOO1' : ($tmp == 'foo2' ? 'FOO2' : 'NO FOO');

暫無
暫無

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

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