3 回答

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊
我想出了檢查是否設(shè)置了任何變量的新想法。然而,正如 deceze 提到的那樣,這是不可能的,但這種方式更容易列出您要檢查的所有變量。但這仍然不是實(shí)現(xiàn)它的非常優(yōu)雅的方法,因?yàn)闆]有很好的方法來做到這一點(diǎn)。
null
在鏈的末尾返回很重要,因?yàn)樗鼤云渌绞斤@示不存在的數(shù)組元素的通知。
$var3 = 'test';
$var4['4'] = false;
$var4['3'] = null;
var_dump(!is_null($var1 ?? $var2 ?? $var3 ?? $var4['4'] ?? null)); //true
var_dump(!is_null($var1 ?? $var2 ?? $var3 ?? null)); //true
var_dump(!is_null($var1 ?? $var2 ?? null)); //false
var_dump(!is_null($var1 ?? $var2 ?? $var4['3'] ?? null)); //false
var_dump(!is_null($var1 ?? $var2 ?? $var4['5'] ?? null)); //false

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊
isset如果變量null根本不存在,則在抑制通知時(shí)檢查變量是否存在。
無法創(chuàng)建像isset. 用戶定義的函數(shù)只能接受值,不能接受“變量”。該值必須在調(diào)用方解析,因此一個(gè)不存在的變量將始終在那里生成一個(gè)通知,并且您的函數(shù)無法執(zhí)行任何操作來抑制它。isset是一種“語言構(gòu)造”,它更像是一個(gè)運(yùn)算符而不是一個(gè)函數(shù),并且沒有辦法模仿它在用戶態(tài)代碼中的作用。在某些特殊情況下,您可以實(shí)施一些解決方法,例如使用全局變量,但在其他情況下這些方法將失敗,例如當(dāng)您不使用全局變量時(shí)。
從根本上說,您一開始就不必過多地處理不存在的變量。您的代碼完全控制它創(chuàng)建的變量,因此如果您定義變量,則無需檢查它們是否存在。任何動態(tài)的東西都應(yīng)該作為數(shù)組或?qū)ο髠鬟f,例如用戶輸入通過$_GET或$_POST或其他可以作為對象傳遞的數(shù)據(jù)結(jié)構(gòu)。然后你不再談?wù)搃sset,而是關(guān)于測試數(shù)組中鍵的存在,例如,這可以簡化,例如:
if (array_intersect_key($array, array_flip(['foo', 'bar', 'baz']))) {
echo 'At least one of those keys was in $array';
}
因此,避免陷入需要首先檢查是否設(shè)置了某些變量的情況。如果您不可避免地處于這種情況,那么isset || isset || ....

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊
我不完全確定這是否是解決此問題的最佳方法......您可以只將變量名傳遞給函數(shù)而不是變量。
//$var1 = 1;
//$var2 = 2;
//$var3 = 3;
function orset()
{
foreach (func_get_args() as $arg) {
global ${$arg};
if (isset(${$arg})) {
return true;
}
}
return false;
}
if (orset('var1', 'var2', 'var3')) {
echo "ok";
}
為什么要抑制錯(cuò)誤?將未定義的變量傳遞給函數(shù)應(yīng)該產(chǎn)生一個(gè)通知。如果您忘記了抑制錯(cuò)誤(您應(yīng)該這樣做),您可以使用:
function orset()
{
foreach (func_get_args() as $arg) {
global $arg;
if (isset($arg)) {
return true;
}
}
return false;
}
if (orset($var1, $var2, $var3)) {
echo "ok";
}
當(dāng)您可以簡單地使用 if (isset($var1) || isset($var) ....
- 3 回答
- 0 關(guān)注
- 162 瀏覽
添加回答
舉報(bào)