2016-11-24 8 views
4

私は最近、この興味深いものを発見したarticleによってDeceze
しかし、私はそのアドバイスの一つで混乱ビットだ:$foo = '';が空の場合PHP:空の文字列にempty()を使用していますか?

empty()を使用して

存在しなければならない変数のために空またはISSETを使用することはありませんが、テストするための良い選択ではないでしょうか?

+0

あなたの質問に答えてください。 –

+0

'$ foo'自体が存在しない可能性がありますか**?それがあなたのために考慮する正当な可能性がない限り、 '空 'を使わないでください。 '== false'はエラー報告を無効にせずに同じことを行います。 – deceze

答えて

1

$fooが存在すると思われる場合は、empty(またはisset)を使用しないでください。ことを意味し、あなたのプログラムロジックによると、$fooは、この時点で存在する必要がある場合:次に

if ($foo === '') 

は、これらのいずれかの操作を行いません。

if (isset($foo)) 
if (empty($foo)) 

これら二つの言語はのために報告抑止エラーを構築未定義の変数。それが彼らの唯一の仕事です。つまり、issetまたはemptyを無償で使用すると、PHPはコード内の問題については通知しません。たとえば:

$foo = $bar; 
if (empty($føø)) ... 

うーん、なぜこの$barが期待値が含まれている場合でも、常にtrueのですか?変数名を誤って入力したため、未定義の変数の値をチェックしています。それは、PHPのヘルプにあなたをできるように、代わりにこのように書く:

if (!$føø) ... 

お知らせ:ライン上で未定義の変数foo ...

条件自体は== false!)とemptyが同じ値で同じ結果を生成する、同じです。

空の文字列を正確に確認する方法は、入力した値と受け入れない値によって異なります。おそらく$foo === ''またはstrlen($foo) == 0という文字列がという文字列であることを確認するためにチェックしている可能性があります。

+0

これらの詳細について多くの感謝。 – 2ndGAB

5

文字列が空であるかどうかをチェックして空ではないかどうかを確認することを意味します。空の場合はfalse、0、nullを意味します。何か「虚偽」。

など。これらはすべて真である:

<?php 

$string = ''; 
if (isset($string) && $string === '') { 
    echo "This is true"; 
} 

$string = null; 
if (isset($string) && $string === '') { 
    echo "This is false"; 
} 
+0

それは彼が実際に意味するものではありません。 **変数自体が設定されているかどうか分からない限り、 'empty'や' isset'を使わないでください。あなたのすべての例で、変数 '$ string'は、あなたがそれを使用しようとしているときに存在することが保証されています。したがって、' isset'チェック(そして拡張子 'empty')は完全に余分です。あなたの文字列がどのくらい空であるかを正確にチェックする方法は、別の話題です。 'strlen'はそのための最良のテストになります。 – deceze

+0

@decezeの回答がはるかに良い –

2

empty()は、多くの場合に使用することができますPHPの:

<?php 

$string = null; 
if (empty($string)) { 
    echo "This is true"; 
} 

$string = ''; 
if (empty($string)) { 
    echo "This is true"; 
} 

$string = 0; 
if (empty($string)) { 
    echo "This is true"; 
} 

あなたは、文字列は、あなたが「」のために、このチェックを行う必要があり、空の文字列であるかどうかを確認したい場合。

これは、チェックのために動作します:変数は

そしてもちろんempty()undefinedまたはnullがあまりにもあなたのケースのために最善であるの場合、文字列はblank

  • ある場合

  • +2

    空白の配列に加えて、他のすべての "偽の"代替( '(int)0'など)の場合も同様です。 –

    +0

    'empty'は' == false'とまったく同じことをしますが、テストしている変数全体が存在しない場合はエラーをスローしません( '空($ undefined)'→エラーなし、 '$ undefined == false'→ 'Notice:未定義変数')。 – deceze

    関連する問題