【PHP】定数(define) – 値に名前を付ける
プログラムで同じ意味の値を扱う場合、定数を使うと様々なメリットを受けることができます。
ここでは定数について解説します。
検証環境
定数
定数は“値に名前を付けたモノ”のことです。
同じプログラム中では定数名の重複はできないため、変数とは異なり値が書き換えられる心配がなく、常に一定の値を保証します。
定義
定数は初めに定義します。
基本構文
define('定数名', 値)
define関数を使って定数を定義します。
関数が未学習の方は書き方だけ覚えておきましょう。
サンプル
<?php
___ih_hl_start
define('MESSAGE', 'Hello');
___ih_hl_end
?>
$ php sample.php
$
実行時に出力はありませんが、内部的に値がHello
の定数MESSAGE
が定義されています。
利用
定義済みの定数は任意の部分に記述して利用できます。
基本構文
定数名
サンプル
<?php
define('MESSAGE', 'Hello');
___ih_hl_start
echo MESSAGE;
___ih_hl_end
?>
$ php sample.php
Hello
5行目で定数を使用しており、変数のように値を取得することができます。
メリット
定数はプログラムの安定性を向上するために有効です。
例えば、定数を使わない次のソースコードをご覧ください。
<?php
echo "Hello Japan!\n";
echo "Hello America!\n";
echo "Hello India!\n";
?>
$ php sample.php
Hello Japan!
Hello America!
Hello India!
Hello 国名
の文字列を3つ出力しています。
このHello
をGood Morning
に変更する場合、3、5、7行目のHello
を合わせて3ヶ所を修正する必要があります。
<?php
___ih_diff_start
-echo "Hello Japan!\n";
+echo "Good Morning Japan!\n";
___ih_diff_end
___ih_diff_start
-echo "Hello America!\n";
+echo "Good Morning America!\n";
___ih_diff_end
___ih_diff_start
-echo "Hello India!\n";
+echo "Good Morning India!\n";
___ih_diff_end
?>
$ php sample.php
Good Morning Japan!
Good Morning America!
Good Morning India!
しかし、定数を使った場合、1ヶ所の修正のみで対応できます。
<?php
define('MESSAGE', 'Hello');
echo MESSAGE . " Japan!\n";
echo MESSAGE . " America!\n";
echo MESSAGE . " India!\n";
?>
$ php sample.php
Hello Japan!
Hello America!
Hello India!
この場合、修正箇所は3行目のHello
のみです。
<?php
___ih_diff_start
-define('MESSAGE', 'Hello');
+define('MESSAGE', 'Good Morning');
___ih_diff_end
echo MESSAGE . " Japan!\n";
echo MESSAGE . " America!\n";
echo MESSAGE . " India!\n";
?>
$ php sample.php
Good Morning Japan!
Good Morning America!
Good Morning India!
また、定義済みの定数と同じ定数名は定義できず、重複した場合はエラーが発生します。
<?php
define('MESSAGE', 'Hello');
define('MESSAGE', 'Good Morning');
?>
$ php sample.php
PHP Warning: Constant MESSAGE already defined in sample.php on line 5
Warning: Constant MESSAGE already defined in sample.php on line 5
そのため、変数とは異なりソースコード中で値が書き換えられることがないため、常に一定の値を保証できます。
このように定数はソースコードの品質と柔軟性の向上を生み出します。