
PHPでは、
FALSE
値と
NULL
値、およびそれらに関連付けられた値は、他の言語で通常使用されている値とは異なり、独自の非自明な機能を備えています。
この記事では、これらの機能について説明します。
初心者にとって、これは、経験のある読者にとって、全体像の可視性に役立ちます-ニュアンスが私の頭から飛び出した場合、メモリを更新します。
If
式のFALSE
PHPドキュメントによると、
boolean
型にキャストした後、次の値はFALSEです。
- ブール値自体はfalseです
- 整数
0
- フロート
0.0
- 空の文字列( string )(
""
)および文字列"0"
- 空の配列( array )-配列()。
- メンバー変数がゼロのオブジェクト(PHP 4のみ、この記事は考慮されません)
- 特別なNULL値(未定義の変数を含む)
- SimpleXMLオブジェクト(この記事では説明していません)
これは、そのような値が条件に渡される場合:
if (…) echo “1”; else echo “0”;
文字列
"0"
が表示されます。
変数の値が設定されていない場合(
unset
)、警告も発行される場合があります。
@
変数の前に書き込むことで、条件の警告を削除できることを思い出してください。
例:
if (@$undefVar) { …}
しかし、よく考えて、他に適切なオプションがない場合は、極端な場合にのみ
@
を使用する必要があります。
isset()
関数を参照してください。
is_null()
関数と言語構成体isset()
およびempty()
IS_NULLは()戻り
TRUE
のみ任意の値を割り当てられていないか、に設定された変数に
NULL
。
isset()は、
is_null()
と比較して1対1の反対のブール値を返します。
変数が設定されていない場合は、
is_null()
も警告与え
«Undefined variable»
とは異なり、
isset()
警告を発行しません。
変数の値を削除するには、 unset()関数を使用できることを思い出してください。 この目的のために
NULL
設定して、変数値を読み取ろうとする際のコンパイラーの警告を回避することもできます。
変数とは異なり、定数を使用するには、 defined()構造を使用する必要があることに注意してください。
empty()を使用すると、すべてが単純になり
FALSE
真の値に対しては
TRUE
を返し、その他のすべてに対しては、ドキュメンテーションから取得した上記のリストに完全に従います 。 ところで、自分で実験する人のために、変数のみを引数として
empty()
渡すことができます。 定数を渡そうとすると、コンパイラは構文エラーを生成します。
配列のインデックス付け
すべての偽の値の配列で作業する場合は、単一の要素に適用されます。
唯一の例外は、インデックス値に空白行(されている
''
)と
NULL
-これら2つの値のためには、別のメモリの代わりに使用されます。
また、空の配列
array()
の値は、他の配列と同様に配列インデックスにすることはできません-コンパイラは警告
«Illegal offset type»
を生成し、そのようなインデックスに対応する値は設定されません。
空の文字列と
NULL
のインデックスを配列内の異なる要素に対応させるには、次のアプローチを使用できます。 機能について説明します。
function index($var) { if ($var === NULL) return 'NULL'; return 'V' . $var; }
さらに、値を設定するときに、空の文字列と
NULL
値の個別のインデックスを取得します。より正確には、さまざまなインデックスをエミュレートします。
$arr[index('')]='value for empty string '; $arr[index(NULL)]='value for NULL';
配列インデックスは別のトピックです。 一例を与えるために、整数インデックスの値こと
$arr[555]
strokovymuインデックスに対応する値と一致
$arr['555']
配列内。
このような機能は、主に配列のインデックスが整数または文字列であるという事実に関連しています。 より詳細な情報は、PHPマニュアルの配列タイプの説明にあります 。
文字列表現
偽の定数の文字列表現を考えます。
たとえば、連結する場合、値は次の表に示す次の行に変換されます。
価値 | ひも |
---|---|
偽 | (空白) |
0 | 0 |
0.0 | 0 |
「」 | (空白) |
「0」 | 0 |
配列() | 配列 |
ヌル | (空の行) |
@ $ undef | (空白) |
文字列への変換のトピックについては、公式Webサイトの「 文字列への変換」セクションで詳しく説明しています 。
比較演算子
比較演算子に渡します。
値と比較した場合、すべての偽の値は、予想通り、trueを返し
FALSE
「演算子を使用して
==
」。
しかし、偽の文字列定数を互いに比較するとき、推移性に依存するべきではありません。
偽の値を比較する完全なテーブルを示します(プラスは、「
!=
」演算子を使用して比較すると真の値を返すテーブルの要素を示します。
!= | 偽 | 0 | 0.0 | 「」 | 「0」 | 配列() | ヌル | @ $ undef |
---|---|---|---|---|---|---|---|---|
偽 | ||||||||
0 | + | |||||||
0.0 | + | |||||||
「」 | + | + | ||||||
「0」 | + | + | + | + | ||||
配列() | + | + | + | + | ||||
ヌル | + | |||||||
@ $ undef | + |
$undef
値が割り当てられていない変数
表から、いくつかの素晴らしい結論を引き出すことができます。
1.文字列のみを使用することがわかっている場合、それらを簡単に比較でき、
""
(空の文字列)が
"0"
等しくなることを心配する必要はありません。
2.配列が文字列、整数、実数と等しくなることはありません。
様々な偽の定数の種類が異なるため、これらを区別するために、あなたは、オペレータのペアを使用することができます
===
と
!==
。
===
演算子は、偽の値のすべてのペアに対して偽の値を返します。
NULL値を割り当てられているそのうちの一つの引数、のために真の値を返し、2番目は値が割り当てられていません。
NULL変数と未定義変数の違い
===
演算子を使用すると、値が割り当てられていない変数とNULL値を持つ変数を除き、すべての偽の値を区別できます。
このような変数は、 get_defined_vars()関数を使用して区別できます。
変数
$var
値が割り当てられているかどうかを判断する必要がある場合は、次のコードフラグメントを使用できます。
if (array_key_exists('var', get_defined_vars()) ) { echo "var is defined"; // $var is assigned NULL } else { echo "var is NOT defined"; // $var is not defined or unset($var) was called }
($のVAR)が呼ばれました if (array_key_exists('var', get_defined_vars()) ) { echo "var is defined"; // $var is assigned NULL } else { echo "var is NOT defined"; // $var is not defined or unset($var) was called }
結論
PHPでは、2つの偽の値が等しくない可能性があり、一見異なる変数は、比較すると同じになることがあることを常に覚えておく必要があります。 このような驚きを避けるために、
===
および
!==
演算子を使用できます。
配列を操作するとき、驚きを避けるために、値を保証された異なるインデックスに変換する関数を書くことができます。 その後、その助けを借りてのみ配列の要素にアクセスします。 これによりプログラムの速度が低下する可能性がありますが、驚きを避けるのに役立ちます。
テストはPHP 5.3.1で実施されました。
サイトリンク
1. タイプの比較表オプションのPHP 。
2. PHPの文脈でのMySQLのNULLと空の文字列 。