未定義変数やnullチェックは安全なプログラムを作るのに欠かせないことです。
PHPにも変数が未定義、あるいは値が null かどうか調べる関数がいくつかあります。
という訳でそれらの関数の使い方について自分の記憶の整理も兼ねて少し解説
未定義 と null の違いは何?
関数を紹介する前に未定義と null の違いというものをハッキリさせておきます。
両者の違いというのは次に説明するようなこと
まず未定義というのは変数そのものが未宣言あるいは値が代入されていない状態を指します。
例えば次のコードのように変数が未宣言だったり、連想配列の存在しないキーにアクセスしたときなどに未定義変数になります。
1 2 3 4 5 6 |
/** 変数自体が未定義の場合 */ $not_defined_var; /** 連想配列の存在しないキーにアクセスした場合 */ $colors = ['red' => '赤', 'green' => '緑', 'blue' => '青']; $yellow = $colors['yellow']; |
変数自体が宣言されていても値が代入されてないなら未定義になる点に注意
そして次にnull変数ですが、これは null という"値がないことを示す値"を持つ変数のことです。
例えば次のように null または NULL を代入することでnull変数になります。
1 2 |
$hoge = null; $huga = NULL; |
null と NULL は全く同じものです。
つまりここまでをまとめると未定義とnullの違いは次のようなこと
- 変数が未定義
変数自体が宣言されていない、あるいは値が代入されてない
- 変数がnull
変数に null または NULL という値がないことを表す値が代入されている
大雑把にいうとこのような違いですね。
未定義とnullを判定する関数まとめ
では変数が未定義あるいは null かどうかを調べるにはどうすればいいか・・・
ということなんですがPHPでは次の2つの関数が用意されています。
- isset関数
- is_null関数
この2つの使い方についてコード例を交えながら説明します。
isset関数
これは変数が未定義または null かどうかを調べるための関数
PHPマニュアルによるとこの関数は次のような説明がされていました。
bool isset ( mixed$var
[, mixed$...
] )変数がセットされており、それが
NULL
でないことを調べます。引用 : PHP : isset - Manual
ただ単に未定義の場合だけでなく、 null の時も true が返される点に注意です。
この関数の使い方は簡単で調べたい変数を渡すだけ
1 2 |
isset($var); isset($var1, $var2, $var3); |
isset関数には上のコード例のように複数変数も渡せますが、1つだけ渡す使い方が一般的です。
この関数の具体的な使われ方ですが、未定義かどうかで処理を分けるのに使われます。
例えば次は連想配列のキーが存在しているかissetで調べているコード例
1 2 3 4 5 6 7 |
$colors = ['red' => '赤', 'green' => '緑', 'blue' => '青']; if(isset($colors['yellow'])){ /** 'yellow'キーに値が存在する時 */ }else{ /** 'yellow'キーに値が存在しない時 */ } |
連想配列などで予期せぬ値にアクセスしてしまうのを防ぐのに役立ちます。
またこれだけでなく三項間演算子と組み合わせれば代入時の未定義チェックに使うことも可能
1 |
$yellow = (isset($colors['yellow'])) ? $colors['yellow'] : ''; |
この書き方はPHPだとよく見かけるチェック方法です。
is_null関数
これは文字通り変数がnull値かどうかを調べるための関数
PHPマニュアルでも次のように説明されていました。
bool is_null ( mixed$var
)指定した変数が
NULL
かどうかを調べます。
こちらはisset関数と違って受け取れる引数は1つだけのようです。
それでこの関数の使い方も簡単でただnullチェックしたい変数を渡すだけ
1 |
is_null($var); |
変数が null の時には true 、そうでないときは false が返ってきます。
ちなみにis_null関数は変数が純粋な null の場合にしか true を返しません。
なので == で比較したときに '' 、 false などは同じと見なされますが、is_null関数では全て false になります。
1 2 3 |
is_null(''); /// => false is_null(0); /// => false is_null(false); /// => false |
本当にnull値が代入されている時だけ真になる点に注意が必要です。
ここまでのまとめ
最後にここまでのことを簡単にまとめてみます。
まず未定義とnullの違いは次のようなこと
- 変数が未定義
変数自体が宣言されていない、あるいは値が代入されてない
- 変数がnull
変数に null または NULL という値がないことを表す値が代入されている
そして変数が未定義またはnullか判定するのに使えるのが次の2つの関数
- isset関数
変数が未定義もしくはnull値の場合に true が返ってくる
- is_null関数
変数が null または NULL の場合に true が返ってくる
変数が使用可能かどうかを調べるにはこれらの関数を使いましょう。
ということでPHPで変数の未定義やnullかどうかを調べる方法でした。
ではでは($・・)/~~~