亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

多資產或條件

多資產或條件

PHP
飲歌長嘯 2023-05-12 15:12:20
isset可用于檢查多個變量是否全部設置:if (isset($var1, $var2, $var3)) {...}但是如果我想檢查是否設置了任何變量怎么辦?if (isset($var1) || isset($var2) || isset($var3)) {...}鑒于使用@錯誤抑制被認為是不好的做法,有沒有比這更好的方法?function orset(){    foreach (func_get_args() as $arg) {        if (isset($arg)) return true;    }    return false;}if (orset(@$var1, @$var2, @$var3)) {...}
查看完整描述

3 回答

?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

我想出了檢查是否設置了任何變量的新想法。然而,正如 deceze 提到的那樣,這是不可能的,但這種方式更容易列出您要檢查的所有變量。但這仍然不是實現它的非常優雅的方法,因為沒有很好的方法來做到這一點。

null在鏈的末尾返回很重要,因為它會以其他方式顯示不存在的數組元素的通知。

$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


查看完整回答
反對 回復 2023-05-12
?
瀟湘沐

TA貢獻1816條經驗 獲得超6個贊

isset如果變量null根本不存在,則在抑制通知時檢查變量是否存在。


無法創建像isset. 用戶定義的函數只能接受值,不能接受“變量”。該值必須在調用方解析,因此一個不存在的變量將始終在那里生成一個通知,并且您的函數無法執行任何操作來抑制它。isset是一種“語言構造”,它更像是一個運算符而不是一個函數,并且沒有辦法模仿它在用戶態代碼中的作用。在某些特殊情況下,您可以實施一些解決方法,例如使用全局變量,但在其他情況下這些方法將失敗,例如當您不使用全局變量時。


從根本上說,您一開始就不必過多地處理不存在的變量。您的代碼完全控制它創建的變量,因此如果您定義變量,則無需檢查它們是否存在。任何動態的東西都應該作為數組或對象傳遞,例如用戶輸入通過$_GET或$_POST或其他可以作為對象傳遞的數據結構。然后你不再談論isset,而是關于測試數組中鍵的存在,例如,這可以簡化,例如:


if (array_intersect_key($array, array_flip(['foo', 'bar', 'baz']))) {

    echo 'At least one of those keys was in $array';

}

因此,避免陷入需要首先檢查是否設置了某些變量的情況。如果您不可避免地處于這種情況,那么isset || isset || ....


查看完整回答
反對 回復 2023-05-12
?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

我不完全確定這是否是解決此問題的最佳方法......您可以只將變量名傳遞給函數而不是變量。


//$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"; 

}

為什么要抑制錯誤?將未定義的變量傳遞給函數應該產生一個通知。如果您忘記了抑制錯誤(您應該這樣做),您可以使用:


function orset()

{

    foreach (func_get_args() as $arg) {       

        global $arg;        

        if (isset($arg)) {

            return true;

        }

    }


    return false;

}


if (orset($var1, $var2, $var3)) {

    echo "ok"; 

}

當您可以簡單地使用 if (isset($var1) || isset($var) ....


查看完整回答
反對 回復 2023-05-12
  • 3 回答
  • 0 關注
  • 154 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號