2017-03-08 162 views
1

我有時會有代碼,我不在乎是否設置了「false」,「empty」,「0」或「null」。如果沒有內容(無論出於何種原因),我只想顯示其內容和其他內容。我平時做這樣的事情:三元運算符shorthands?和?:

echo isset($a) && $a ? $a : 'something else'; 

看來,與三元速記,我能爲「空」,「假」,「空」做這樣的事情:

echo $a ?: 'something else'; 

但它確實如果未設置$ a,則不起作用。所以,我可以做這樣的事情:

echo $a ?? 'something else'; 

但如果$a是空的,將顯示一個空字符串。 簡化我的代碼有一個技巧或速記嗎?(只有設置了它才顯示「別的東西」,而不是空的 - false-null)。使用-情況

示例:解析JSON,你可以有沒有價值,沒有按鍵或一個條目沒有內容,並不要緊,你必須處理它的方式相同。所以,同樣的事情,如果是空的,沒有設置,虛假或無效

+1

我有點不確定你爲什麼說'?:'不適合你。 https://repl.it/GMHc **編輯:**啊,我錯過了'$ a'未定義的情況 –

+1

請注意,在您的原始代碼(和@ deceze的回答)中,您過濾掉了'0'以及。這可能不是你想要的。 – jeroen

+0

如果未設置$ a(從未聲明),則不起作用 –

回答

4

??確實不僅凝聚,它不考慮感實性
?:另一方面不捕捉未定義的變量錯誤。

我在這裏看到的唯一簡化是您使用isset($a) && $a;這也正是empty語言結構是什麼:

echo !empty($a) ? $a : 'something else'; 

說了這麼多,你不應該有很多未定義變量的擺在首位,這是很糟糕的編碼。你似乎是主要關注的是數組鍵,在這種情況下,一個小的輔助函數可能是最好的行動路線:

echo get($a, 'key', 'something else'); 

我要離開的實施作爲一個練習留給讀者。