[英]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.