変数の存在チェックを行う関数である isset 及び、変数の割り当てを解除する unset について説明します。
■isset関数
先ずは isset 関数ですが以下の様な定義になっています。(PHP の正式な説明サイトより)
isset ( mixed $var , mixed ...$vars ) : bool [説明] 変数が宣言されていること、そして null とは異なることを検査します。 [パラメータ ] $var :チェック対象変数。 $vars :その他のチェック対象変数。 [返り値] 変数が存在し null でなければ true、それ以外は false を返す。 変数が複数指定された場合は、全ての変数が存在し null でなければ true、それ以外は false を返す。
それでは、簡単な例のスクリプトを以下に示します。 (尚、3行目の設定はWindowsコマンドプロンプトでの実行時に、コンソールへの出力を Shift-JIS にする為のものです)
<?php /* f1-isset-1.php */
// Windowsコマンドプロンプトで[XAMPP]のPHPで表示を Shift-JIS にする為の設定
ob_start(function($buf){ return mb_convert_encoding($buf, 'SJIS', 'UTF-8'); });
// 変数が宣言されていない状況でチェック
if (isset($data) == true) {
echo "\$data は宣言されています。\n";
} else {
echo "\$data は宣言されていないか null です。\n";
}
// 変数を宣言した状況でチェック
$data = "test";
if (isset($data) == true) {
echo "\$data は宣言されています。\n";
} else {
echo "\$data は宣言されていないか null です。\n";
}
// 変数を null 設定した状況でチェック
$data = null;
if (isset($data) == true) {
echo "\$data は宣言されています。\n";
} else {
echo "\$data は宣言されていないか null です。\n";
}
</html>
これをWindowsコマンドプロンプトで実行すると以下の表示になります。
C:\xampp\htdocs\_test>php f2-isset-1.php $data は宣言されていないか null です。 $data は宣言されています。 $data は宣言されていないか null です。
さらに、関数パラメータには配列も指定することで、配列にキー値で指定された要素の存在チェックが確認できます。 以下のその例を示します。
<?php /* f2-isset-2.php */
// Windowsコマンドプロンプトで[XAMPP]のPHPで表示を Shift-JIS にする為の設定
ob_start(function($buf){ return mb_convert_encoding($buf, 'SJIS', 'UTF-8'); });
// 配列を宣言
$arr = array(0 => "11111", // KEY:数値
"key1" => "22222", // KEY:文字列
"key2" => array("test" => "abcdef")); // KEY:文字列で入れ子で配列
// 存在する数値KEYのチェック
if (isset($arr[0]) == true) {
echo '$arr[0] は宣言されています。'."\n";
} else {
echo '$arr[0] は宣言されていないか null です。'."\n";
}
// 存在しない数値KEYのチェック
if (isset($arr[1]) == true) {
echo '$arr[1] は宣言されています。'."\n";
} else {
echo '$arr[1] は宣言されていないか null です。'."\n";
}
// 存在する文字列KEYのチェック
if (isset($arr["key1"]) == true) {
echo '$arr["key1"] は宣言されています。'."\n";
} else {
echo '$arr["key1"] は宣言されていないか null です。'."\n";
}
// 存在しない文字列KEYのチェック
if (isset($arr["key0"]) == true) {
echo '$arr["key0"] は宣言されています。'."\n";
} else {
echo '$arr["key0"] は宣言されていないか null です。'."\n";
}
// 入れ子で配列の存在する文字列KEYのチェック
if (isset($arr["key2"]["test"]) == true) {
echo '$arr["key2"]["test"] は宣言されています。'."\n";
} else {
echo '$arr["key2"]["test"] は宣言されていないか null です。'."\n";
}
// 入れ子で配列の存在しない文字列KEYのチェック
if (isset($arr["key2"]["test1"]) == true) {
echo '$arr["key2"]["test1"] は宣言されています。'."\n";
} else {
echo '$arr["key2"]["test1"] は宣言されていないか null です。'."\n";
}
// 変数を null 設定した状況でチェック
$arr["key2"]["test"] = null;
if (isset($arr["key2"]["test"]) == true) {
echo '$arr["key2"]["test"] は宣言されています。'."\n";
} else {
echo '$arr["key2"]["test"] は宣言されていないか null です。'."\n";
}
</html>
これをWindowsコマンドプロンプトで実行すると以下の表示になります。
C:\xampp\htdocs\_test>php f2-isset-2.php $arr[0] は宣言されています。 $arr[1] は宣言されていないか null です。 $arr["key1"] は宣言されています。 $arr["key0"] は宣言されていないか null です。 $arr["key2"]["test"] は宣言されています。 $arr["key2"]["test1"] は宣言されていないか null です。 $arr["key2"]["test"] は宣言されていないか null です。
■isset関数を使った例(HTMLのFORMタグでのPOST送信)
isset 関数を使用する例ですが以下の様な、 HTMLページの中に TEXTBOX を設置し SUBMIT ボタンで POST送信する時のデータ取得があります。 POST送信で PHP 側での受け取りは $_POST 変数から行います。
isset で $_POST をチェックするのは、最初にこのスクリプトが呼ばれた場合と、 SUBMIT ボタンを押下することで自分自身を呼出した場合の仕訳を行うためです。
最初にこのスクリプトが呼ばれた場合 $_POST にはデータが存在しませんが、 SUBMIT ボタンを押下した場合に from タグの中身が自分自身にPOSTされてきます。 それで isset でチェックしてデータを取得しています。
<?php /* f2-isset-3.php */
// 受信データ変数初期化
$strName = "";
$strZipno = "";
$strAddr = "";
// $POSTから取得
if((isset($_POST['pname']) == true) && ($_POST['pname'] != "")){
$strName = trim($_POST['pname']);
}
if((isset($_POST['zipno']) == true) && ($_POST['zipno'] != "")){
$strZipno = trim($_POST['zipno']);
}
if((isset($_POST['addr']) == true) && ($_POST['addr'] != "")){
$strAddr = trim($_POST['addr']);
}
?>
<html>
<head>
<meta charset="utf-8">
<title>問合せ・個人情報</title>
</head>
<body>
<h1>問合せ・個人情報</h1>
<form name="enqform" action="enq1.php" method="post">
名前 :<input type="text" name="pname" maxlength="20" value="<?php echo $strName; ?>" /><br />
郵便番号:<input type="text" name="zipno" maxlength="8" value="<?php echo $strZipno; ?>" /><br />
住所 :<input type="text" name="addr" maxlength="30" value="<?php echo $strAddr; ?>" /><br />
<input type="submit" value="送信" />
</form>
</body>
</html>
■unset関数
unset 関数ですが以下の様な定義になっています。
unset ( mixed $var , mixed ...$vars ) : void [説明] unset() は指定した変数を破棄します。 [パラメータ ] $var :破棄する変数。 $vars :その他のチェック対象変数。
以下にunset 関数を使用した例のスクリプトを示します。
<?php /* f2-unset-1.php */
// Windowsコマンドプロンプトで[XAMPP]のPHPで表示を Shift-JIS にする為の設定
ob_start(function($buf){ return mb_convert_encoding($buf, 'SJIS', 'UTF-8'); });
// 変数宣言
$data = "111";
// 変数チェック
if (isset($data) == true) {
echo '$data は宣言されています。'."\n";
} else {
echo '$data は宣言されていないか null です。'."\n";
}
// 変数廃棄
unset($data);
// 変数チェック
if (isset($data) == true) {
echo '$data は宣言されています。'."\n";
} else {
echo '$data は宣言されていないか null です。'."\n";
}
?>
これをWindowsコマンドプロンプトで実行すると以下の表示になります。
C:\xampp\htdocs\_test>php f2-unset-1.php $data は宣言されています。 $data は宣言されていないか null です。
尚、unset 関数は配列の要素に対しても廃棄処理ができますので、その例としてのスクリプトを示します。
<?php /* f2-unset-2.php */
// 配列を宣言
$arr = array(0 => "11111", // KEY:数値
1 => "aaaaa", // KEY:数値
"key1" => "22222", // KEY:文字列
"key2" => array("test1" => "abcdef", // KEY:文字列で入れ子で複数配列
"test2" => "wwwwww"),
"key3" => array("test" => "abcdef")); // KEY:文字列で入れ子で配列
// 最初に変数内部表示
print_r($arr);
// 数値キーの廃棄
unset($arr[1]);
// 文字列キーの廃棄
unset($arr["key1"]);
// 子配列の廃棄1
unset($arr["key2"]["test1"]);
// 子配列の廃棄2
unset($arr["key3"]["test"]);
// 変数内部表示
print_r($arr);
?>
これをWindowsコマンドプロンプトで実行すると以下の表示になります。
C:\xampp\htdocs\_test>php f2-unset-2.php
Array
(
[0] => 11111
[1] => aaaaa
[key1] => 22222
[key2] => Array
(
[test1] => abcdef
[test2] => wwwwww
)
[key3] => Array
(
[test] => abcdef
)
)
Array
(
[0] => 11111
[key2] => Array
(
[test2] => wwwwww
)
[key3] => Array
(
)
)
配列の中の対応するキー値が削除されているのが分かると思います。
コメント