忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

PHP define の使い方ついて(定数定義について)

今回は今更ながら 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)を定義する例を記します。

■配列データ(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

コメント

コメントを書く