2009-04-09 37 views
22

可能重複:
Fixing the PHP empty functionPHP:什麼是空()的替代,其中字符串「0」不被視爲空?

在PHP中,空()是一個偉大的快捷方式,因爲它可以讓你檢查變量是否定義,並在同一時間不是空的。

當你不想讓「0」(作爲字符串)被認爲是空的,但你仍然希望將false,null,0和「」視爲空時,你會使用什麼?

也就是說,我只是想知道,如果你有自己的快捷方式是:

if (isset($myvariable) && $myvariable != "") ;// do something 
if (isset($othervar ) && $othervar != "") ;// do something 
if (isset($anothervar) && $anothervar != "") ;// do something 
// and so on, and so on 

我不認爲我可以定義爲這樣的輔助函數,因爲變量可能是不確定的(和因此不能作爲參數傳遞)。

+0

我想我現在認識到,沒有解決方案 - 至少沒有一個能夠縮短代碼長度。 – thomasrutter 2009-04-17 15:03:35

+0

嗯..贊同你 – mysqllearner 2010-02-08 09:14:24

回答

1

答案就是不可能縮短我已有的東西。 ()或isset()在檢查值之前需要檢查是否是空的()或者isset(),並且你不能檢查是否有東西是空的()或函數內的isset()。 ($ var!

3
 
if ((isset($var) && $var === "0") || !empty($var)) 
{ 

} 

這樣你會進入,如果變量被設置且是 「0」,或者變量被設置,而不是= NULL( 「0」,空,假)

+0

這看起來相當正確;它不是真正的if(isset($ myvariable)&& $ myvariable!=「」)的快捷方式,因爲它更長。感謝你的回答。 – thomasrutter 2009-04-11 13:57:32

21

這IF-構建應該做你想做的事:

function notempty($var) { 
    return ($var==="0"||$var); 
} 

編輯:我猜表格只能在預覽中工作,而不是在實際的答案提交。所以請參考PHP type comparison tables瞭解更多信息。

 
notempty("")  : false 
notempty(null)  : false 
notempty(undefined): false 
notempty(array()) : false 
notempty(false) : false 
notempty(true)  : true 
notempty(1)  : true 
notempty(0)  : false 
notempty(-1)  : true 
notempty("1")  : true 
notempty("0")  : true 
notempty("php") : true 

基本上,notempty()是相同!空()對於除所有值 「0」,爲此,它返回真


編輯:如果您使用 error_reporting(E_ALL),您將無法通過值將未定義的變量傳遞給自定義函數。正如mercator指出的那樣,您應該始終使用 使用 E_ALL以符合最佳做法。他提供的 This link(評論#11)討論了爲什麼不應該爲了性能和可維護性/調試原因而使用任何形式的錯誤抑制。

有關如何將參數傳遞給自定義函數的信息,請參閱orlandu63的答案by reference

+2

當變量未定義時會失敗。 – mercator 2009-04-09 07:41:48

+0

你是什麼意思?如果傳遞一個未定義的變量,函數返回false - 這與empty()返回的結果相反:http://us2.php.net/manual/en/types.comparisons.php這是所需的行爲。 – Calvin 2009-04-09 09:57:39

+1

它不會失敗,但會產生警告。所以,雖然它確實有效,但它不是正確的方法(tm)。在使用=== – 2009-04-09 16:45:10

0
if(isset($var) && ($var === '0' || !empty($var))) 
{ 
} 
0
function Void($var) 
{ 
    if (empty($var) === true) 
    { 
     if (($var === 0) || ($var === '0')) 
     { 
      return false; 
     } 

     return true; 
    } 

    return false; 
} 
9
function isempty(&$var) { 
    return empty($var) || $var === '0'; 
} 

的關鍵是&運算符,它由reference經過可變,則創建一個如果它不存在它。

0

If($ var!= null)

相關問題