今回は今更ながら define の使い方について紹介したいと思います。
この define ですがプログラム中で使う定数を定義するために使います。 重要な定数は意味のある名前で定義しておいて、それをプログラム中で使うことになります。
良くある使い方では、全体のシステムの中で、プログラムで使う定数は別ファイルにして一括で定義しておいて そのファイルをインクルードする様な感じになります。
define は以下の様に定義された命令(関数?)です。
[$booleanRet = ] define(string $constant_name, mixed $value, bool $case_insensitive = false); // $booleanRet(戻り値) : true(定義の結果がOK)、false(定義の結果がNG) // $constant_name : 定義名(文字列:英数字か_(アンダースコア)で、数字が使えるのは2文字目以降) // $value : 定義値(PHP5:スカラー値 (int、 float、string、bool あるいは null)) // (PHP7:配列データも可能) // $case_insensitive : 大文字と小文字の区別(true:区別無)
define の簡単なテストを行う為に以下のソースを実行させてみます。
■define の簡単なテスト
以下の例では、スカラー値の (int、 float、string、bool あるいは null) の6個の定数定義をテストしています。
<?php
// 各定数定義
define('TEST_int' , 100);
define('TEST_float' , 123.54);
define('TEST_string' , 'ABCDEF');
define('TEST_bool_true' , true);
define('TEST_bool_false', false);
define('TEST_null' , null);
// 定数表示
echo "<pre>";
var_dump(TEST_int);
var_dump(TEST_float);
var_dump(TEST_string);
var_dump(TEST_bool_true);
var_dump(TEST_bool_false);
var_dump(TEST_null);
echo "</pre>";
?>
これを実行すると以下の内容がブラウザに表示されます。
int(100) float(123.54) string(6) "ABCDEF" bool(true) bool(false) NULL
■配列データ(array)を define で定義するテスト
<?php
// array定数定義
define('TEST_array' , array("TEST001", "TEST222", "TEST333", "てすとAAA"));
// 定数表示
echo "<pre>";
foreach (TEST_array as $val) {
var_dump($val);
}
echo "</pre>";
?>
これを実行すると以下の内容がブラウザに表示されます。
string(7) "TEST001" string(7) "TEST222" string(7) "TEST333" string(12) "てすとAAA"
■最初の例を eval() を使ってテストする
以下の例は define で定義された名前を配列に設定し、ループで処理しています。
<?php
// 各定数定義
define('TEST_int' , 100);
define('TEST_float' , 123.54);
define('TEST_string' , 'ABCDEF');
define('TEST_bool_true' , true);
define('TEST_bool_false', false);
define('TEST_null' , null);
// 定数表示
echo "<pre>";
$arr = ['TEST_int', 'TEST_float', 'TEST_string', 'TEST_bool_true', 'TEST_bool_false', 'TEST_null'];
foreach ($arr as $name) {
$strCmd = "var_dump($name);";
eval($strCmd); // PHP 命令を文字列で与えて実行する
}
echo "</pre>";
?>
■define は再定義ができません
以下の例は define で再定義のテストを行います。<?php
// 定数定義
define('TEST', 100);
// 定数再定義
define('TEST', 'ABCEDF');
// 定数表示
echo "<pre>";
var_dump(TEST);
echo "</pre>";
?>
これを実行すると以下の様にブラウザに表示されます。 再定義の部分で警告メッセージが表示されました。
再定義など簡単なプログラムでは起きませんが、 各種の定義をまとめたファイルを別のところに置いておき、それをインクルードして使う場合、こういったことも起きるかもしれません。 さらにインクルードファイルが多くなればなるほど注意が必要だと思います。
Notice: Constant TEST already defined in C:\xampp\htdocs\_test\define-2.php on line 5 int(100)
PR
コメント