2009-04-09 16 views
22

可能性の重複:PHPで
Fixing the PHP empty functionPHP:empty()の代わりに何がありますか?文字列 "0"は空として扱われません。

、空の()は変数が同時に空に定義されていないかどうかを確認することができますので、偉大なショートカットです。

"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

+0

うーん..あなたと同意する – mysqllearner

答えて

1

この回答は、私がすでに持っているものを短縮することができないということです。

通知や警告を抑制することは私がやりたいことではないので、値をチェックする前にempty()かisset()をチェックする必要があります。または関数内のisset()。

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

} 

変数が設定され、「0」である、または変数が設定されているAND(「0」、NULL、偽)

+0

これはかなり正しいと思われる。 if(isset($ myvariable)&& $ myvariable!= "")のショートカットではありません。答えをありがとう。 – thomasrutter

21

これではない= nullの場合構築場合は、次のように入力します。この方法

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)を使用している場合、未定義の変数を値によってカスタム関数に渡すことはできません。そして、メルケータが指摘するように、 は常に E_ALLをベストプラクティスに適合させる必要があります。 This link(コメント#11)は、性能と保守性/デバッグ上の理由から、エラー抑制の形式を使用しない理由を説明しています。

引数をカスタム関数by referenceに渡す方法については、orlandu63の回答を参照してください。

+2

変数が未定義のときは失敗します。 – mercator

+0

どういう意味ですか?未定義の変数が渡された場合、この関数はfalseを返します。これは、empty()が返すものの逆です。http://us2.php.net/manual/en/types.comparisons.phpこれは望ましい動作です。 – Calvin

+1

失敗しませんが、警告が表示されます。だから、それはうまくいくが、正しい方法(tm)ではない。変数が=== –

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; 
} 
+0

これは、$ varが未定義の場合、(Void関数のように、issetまたは空以外の関数に)引数として渡されるとすぐに失敗するという問題があります。私が望んでいたことは実際には不可能だと思います、申し訳ありません。 – thomasrutter

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

キーは、それが存在しない場合、それを作成し、referenceによって変数を通過&演算子です。

+0

$ varが存在しない場合、これはまだエラー(または警告または通知)を発行しませんか? – thomasrutter

+3

実際には、この関数は、定義されていない変数を暗黙的に(nullとして)定義し、エラーや通知を発行しません。 – Brilliand

0

If($ var!= null)

+0

$ varが未定義の場合はエラーとなります。 – thomasrutter

関連する問題