私もphpを学びます:タイプの判断とNULL、空の値の検査
2949 ワード
PHPは、入力されたパラメータ値の「タイプ」および「値が空かNULLか」を関数でチェックするゆとりのあるプログラミング言語です.
タイプチェック
PHP 5から、PHPは関数のパラメータをタイプコンストレイントすることを許可する.すなわち、パラメータをコンストレイントできるタイプがオブジェクト、インタフェース、配列(PHP 5.1から)、またはcallable(PHP 5.4から)、ただし、コンストレイントパラメータタイプがint、string、boolなどのスカラータイプであっても、Traitsタイプであってもコンストレイントできません.コンストレイントしない場合、デフォルトでは、パラメータのタイプはmixedであり、すべてのタイプを受け入れることができます.
特定のパラメータタイプの機能関数に対して,関数に組み込まれたパラメータのタイプ検査が必要である(外国の学者の文章を見たことがあるが,これは推奨されていないが,関数の機能を束縛することに相当する).
PHPではgettypeとget_resource_typeの2つの関数は変数のタイプを得て、それらはそれぞれパラメータのタイプと資源のタイプの文字列を返して、この時直接文字列の比較を行ってタイプが正しいかどうかを決定することができます.もう1つの方法はis_***を介してシリーズの関数は、変数のタイプが指定されたタイプであるかどうかを判断します.例えばis_array,is_scalar,is_resource,is_string.
変数/定数が定義または初期化されているかどうか
PHPでは、変数は定義後に初期化する必要がなく、そのタイプのデフォルト値を持つように初期化されますが、推奨されません.一般的には変数の表示初期化が望ましいです.
変数が明示的に初期化されているかどうかを判断するには、「構文」-issetを使用します.変数が明示的に初期化されているかどうかを判断します.issetは、変数が「明示的に付与されていないか、NULLが付与されていない」場合にのみfalseとして返されます.その他の場合、値が空の文字列、0などの場合にはtrueが返されます.
unsetを使用して、定義された変数を削除できます.
issetとunsetは「変数」に対してのみ定義を判断、削除できます.「定数」に対してはdefinedを使用して判断する必要があります.「関数」に対してはfunction_exist()関数を使用して判断する必要があります.
変数がNULLかどうかを判断
PHPで変数がNULLかどうかを判断するには、次のような方法があります.
is_null VS isset
この2つの関数は、1つの変数がNULLであるかどうかを判断することができ、空の文字列、0、falseに対する承認は同じです.すなわちis_null=! isset().
しかしissetは構文構造でありis_nullは関数です.パフォーマンス上、文法構造は比較的優れています.だから多くの場所でisの代わりにissetを使うことをお勧めします.nullの使用.
== VS ===
場合によってはissetを使用して変数がNULLであるかどうかを判断することを推奨します.
しかし、意味的には、変数「初期化」と「NULL」が異なる概念であるかどうかが表示されているかどうかは、関数の戻り値がNULLであるかどうかを確認するなど、issetを使用するシーンによっては適切ではありません.
"=="と"==="を使用して、NULLであるかどうかを判断できます.
「===」と「====」の場合、直接の違いは大きいです.「==」の場合、空の文字列は0、falseはNULLであることを認めます.「===」の場合、NULLを表す変数は1つだけです.
また、「====」は「isset」に比べて、パフォーマンスがほぼ近く、さらに優れています.
したがって、上記のように、変数がNULLであるか否かを判断する最善の方法は、is_null,issetの間でためらう.実は上記の結論もFalseの判断と同じです.
Empty()関数の認識
変数がNULLであるかどうかを判断する際にも,emptyという関数をissetなどと一緒に議論する.実はこの関数は彼らと比較する必要はありません.それは簡単な意味を表しているので、変数が格納している内容がゼロか空かを判断することを意味します.ここの空はNULLだけではありません.では、ゼロや空の概念を表す内容は何ですか?""、0、"0"、NULL、FALSE、array()、var $var; また、属性のないオブジェクトは空とみなされ、ゼロを表します.$eが未定義または値がNULLLである場合、$e=NULLは空であるに違いない.すなわち、empty($e)=trueである. $eがintタイプ、$e=0の場合、0は数値に対してゼロ、すなわちempty($e)=trueを表す. $eがstringタイプである場合、$e=","文字列に対して","は、empty($e)=trueとして表され、 $eがstringタイプである場合、$e="0"、文字列に対して"0"はゼロ、すなわちempty($e)=trueを表す; $eがboolタイプである場合、$e=false、trueに対してfalseは空、すなわちempty($e)=trueを表す. $eがarrayタイプである場合、$a=array()であり、配列に対して要素のないデータは空であり、すなわちempty($e)=trueである.
変数に値が設定されていない場合に警告が発生しないことを除いて、empty()は(boolean)varの反意語である.
さらに読む
タイプ制約:http://www.php.net/manual/zh/language.oop5.typehinting.php
Variable handling関数:http://www.php.net/manual/zh/ref.var.php
PHPタイプ比較表:http://www.php.net/manual/zh/types.comparisons.php
タイプチェック
PHP 5から、PHPは関数のパラメータをタイプコンストレイントすることを許可する.すなわち、パラメータをコンストレイントできるタイプがオブジェクト、インタフェース、配列(PHP 5.1から)、またはcallable(PHP 5.4から)、ただし、コンストレイントパラメータタイプがint、string、boolなどのスカラータイプであっても、Traitsタイプであってもコンストレイントできません.コンストレイントしない場合、デフォルトでは、パラメータのタイプはmixedであり、すべてのタイプを受け入れることができます.
function test(array $names)//
function test(string $name)//
特定のパラメータタイプの機能関数に対して,関数に組み込まれたパラメータのタイプ検査が必要である(外国の学者の文章を見たことがあるが,これは推奨されていないが,関数の機能を束縛することに相当する).
PHPではgettypeとget_resource_typeの2つの関数は変数のタイプを得て、それらはそれぞれパラメータのタイプと資源のタイプの文字列を返して、この時直接文字列の比較を行ってタイプが正しいかどうかを決定することができます.もう1つの方法はis_***を介してシリーズの関数は、変数のタイプが指定されたタイプであるかどうかを判断します.例えばis_array,is_scalar,is_resource,is_string.
変数/定数が定義または初期化されているかどうか
PHPでは、変数は定義後に初期化する必要がなく、そのタイプのデフォルト値を持つように初期化されますが、推奨されません.一般的には変数の表示初期化が望ましいです.
変数が明示的に初期化されているかどうかを判断するには、「構文」-issetを使用します.変数が明示的に初期化されているかどうかを判断します.issetは、変数が「明示的に付与されていないか、NULLが付与されていない」場合にのみfalseとして返されます.その他の場合、値が空の文字列、0などの場合にはtrueが返されます.
unsetを使用して、定義された変数を削除できます.
issetとunsetは「変数」に対してのみ定義を判断、削除できます.「定数」に対してはdefinedを使用して判断する必要があります.「関数」に対してはfunction_exist()関数を使用して判断する必要があります.
変数がNULLかどうかを判断
PHPで変数がNULLかどうかを判断するには、次のような方法があります.
is_null VS isset
この2つの関数は、1つの変数がNULLであるかどうかを判断することができ、空の文字列、0、falseに対する承認は同じです.すなわちis_null=! isset().
しかしissetは構文構造でありis_nullは関数です.パフォーマンス上、文法構造は比較的優れています.だから多くの場所でisの代わりにissetを使うことをお勧めします.nullの使用.
== VS ===
場合によってはissetを使用して変数がNULLであるかどうかを判断することを推奨します.
しかし、意味的には、変数「初期化」と「NULL」が異なる概念であるかどうかが表示されているかどうかは、関数の戻り値がNULLであるかどうかを確認するなど、issetを使用するシーンによっては適切ではありません.
"=="と"==="を使用して、NULLであるかどうかを判断できます.
「===」と「====」の場合、直接の違いは大きいです.「==」の場合、空の文字列は0、falseはNULLであることを認めます.「===」の場合、NULLを表す変数は1つだけです.
また、「====」は「isset」に比べて、パフォーマンスがほぼ近く、さらに優れています.
したがって、上記のように、変数がNULLであるか否かを判断する最善の方法は、is_null,issetの間でためらう.実は上記の結論もFalseの判断と同じです.
Empty()関数の認識
変数がNULLであるかどうかを判断する際にも,emptyという関数をissetなどと一緒に議論する.実はこの関数は彼らと比較する必要はありません.それは簡単な意味を表しているので、変数が格納している内容がゼロか空かを判断することを意味します.ここの空はNULLだけではありません.では、ゼロや空の概念を表す内容は何ですか?""、0、"0"、NULL、FALSE、array()、var $var; また、属性のないオブジェクトは空とみなされ、ゼロを表します.
変数に値が設定されていない場合に警告が発生しないことを除いて、empty()は(boolean)varの反意語である.
さらに読む
タイプ制約:http://www.php.net/manual/zh/language.oop5.typehinting.php
Variable handling関数:http://www.php.net/manual/zh/ref.var.php
PHPタイプ比較表:http://www.php.net/manual/zh/types.comparisons.php