ITHACK
~ みんなのIT部門 ~
【PHP】定数(define) – 値に名前を付ける

【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つ出力しています。

このHelloGood 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

そのため、変数とは異なりソースコード中で値が書き換えられることがないため、常に一定の値を保証できます。

このように定数はソースコードの品質と柔軟性の向上を生み出します。