在PHP中我發現自己寫的代碼像這樣頻繁:如果分配變量設置
$a = isset($the->very->long->variable[$index])
? $the->very->long->variable[$index]
: null;
有沒有一種簡單的方法來做到這一點?最好不要求我寫兩次$the->very->long->variable[$index]
。
在PHP中我發現自己寫的代碼像這樣頻繁:如果分配變量設置
$a = isset($the->very->long->variable[$index])
? $the->very->long->variable[$index]
: null;
有沒有一種簡單的方法來做到這一點?最好不要求我寫兩次$the->very->long->variable[$index]
。
假設你知道$the->very->long->variable
設置,而你只是擔心數組索引....
$x = $the->very->long->variable;
$a = isset($x[$index]) ? $x[$index] : null;
或爲一個更通用的變種,你可以用你身邊代碼:
function array_valifset($arr,$k, $default=null) {
return isset($arr[$k]) ? $arr[$k] : $default;
}
然後調用它像這樣對於任何數組值:
$a = array_valifset($the->very->long->variable,$index);
我偶然發現了同樣的問題,並發現引用數組元素不會發出通知或警告,但會返回null(至少PHP 5.6)。
$foo = ['bar' => 1];
var_dump($bar = &$foo['bar']); // int 1
var_dump($baz = &$foo['baz']); // null
內的if語句:
if($bar = &$foo['bar']) {
echo $bar;
}
if($baz = &$foo['baz']) {
echo $baz;
}
的更新,因爲PHP 7而出現在是在這一點上改變遊戲規則;以前的答案大約是PHP 5.
PHP 7解決了這個問題。因爲你確實認爲用PHP編寫這個文件是很常見的,這絕對不是很優雅。
在PHP 7中出現了Null Coalesce Operator (RFC),這是isset三元條件的完美縮寫。
它的目標是取代這種類型的條件:
$var = isset($dict['optional']) ? $dict['optional'] : 'fallback';
到那個:
$var = $dict['optional'] ?? 'fallback';
更妙的是,空COALESCE運營商可鏈接:
$x = null;
# $y = null; (undefined)
$z = 'fallback';
# PHP 7
echo $x ?? $y ?? $z #=> "fallback"
# PHP 5
echo isset($x) ? $x : (isset($y) ? $y : $z)
空聚合運算符的行爲與isset()
完全相同:主題變量的值取自:
只是爲PHP初學者注:如果您使用三元條件,但你知道的主題變量必然定義(但你想爲falsy值回退),還有的Elvis operator:
$var = $dict['optional'] ?: 'fallback';
隨着貓王操作,如果$dict['optional']
是一個無效的偏移或$dict
是不確定的,你會得到一個警告E_NOTICE
(PHP 5 & 7)。這就是爲什麼在PHP 5中,人們使用可怕的isset a? a:b表格,當他們不確定輸入。
很好的工作@Morgan用一個新的答案更新這個!謝謝。 –
如果你只分配null
代替非設置爲可變的,你可以使用:
$a = @$the->very->long->variable[$index];
@
使得該指令拋出任何錯誤
通過工作OOP和使用__get和__set? –
@DaHaKa:這可能會在設置良好的服務器上發出警告('E_STRICT | E_ALL)' –
如果您經常使用相同的long變量,則可以使用引用:'$ ref = $ the-> very->長>變量; $ a =!empty($ ref [$ index])? $ ref [$ index]:null; $ b =!empty($ ref [++ $ index])...',或者@Bondye指出的那樣,使用神奇的getter方法,並將其設置爲返回_either_ null或屬性值 –