PHPのisset関数

プログラミング

スポンサーリンク

PHPのisset関数は変数に値がセットされているかどうかを調べる

PHPのisset関数はその名の通り、変数に値がセットされているかどうかを調べるための関数。・・・と思っていたのですけど、勉強中に良く分からなくなってしまったので記事として整理します。

  • NULLを入れているとflaseが返る
  • 宣言してない(=その変数に値を代入していない)とfalseが返る
  • 空文字を代入するとtrueが返る
  • 複数引数を指定した場合は、すべて値がセットされている場合にtrueが返る

こんなところでしょうか。

実際に出力して確認

前回のPHP記事と同様に出力して確認してみました。

以下前提。
$a = NULL;
$b = “”;
$c = 0;
//$d = 1;

  • isset($a); => false
  • isset($b); => true
  • isset($c); => true
  • isset($d); => false
  • isset($a, $b, $c) => false

実際のコード

<?php

$a = NULL;
$b = "";
$c = 0;
// $d = 1;

echo (isset($a)? "true" : "false") . PHP_EOL;
echo (isset($b)? "true" : "false") . PHP_EOL;
echo (isset($c)? "true" : "false") . PHP_EOL;
echo (isset($d)? "true" : "false") . PHP_EOL;
echo (isset($a,$b,$c)? "true" : "false") . PHP_EOL;

参考

編集後記

何に混乱してたかというと、$$を使って代入(変数の文字列の変数に代入)していた箇所があって、その箇所を見落としていたため、issetにNULL入れてもtrue帰ってくるぞ!・・・と勘違いしてました。

こんなコードを書いていました(だいぶ簡略化してます)。

$error = NULL;
$data["error"] = "エラーがありました";
$data["name"] = "aaa";
・
・
convertVal($data);  // 関数内で配列のキー名の変数を作成

if (isset($error)) {
  (通らないと思っているのになぜかここを通っていた)
}

function convertVal($data) {
  foreach($data as $key => $val) {
    $$key = $val;
  }
}

issetは悪くない・・・。僕も何も誤解してない。書いたコードが糞だっただけだorz