ITHACK
~ みんなのIT部門 ~

【PHP】定数(define) – 値に名前を付ける

値に名前を与えたものを定数と呼びます。
定数は同じ意味の値を使うプログラムでは強力な仕組みとなります。

ここでは定数について解説します。

  • 定数

  • 定数のメリット

定数とは

定数とは値に名前を付けたもののことです。
定数に1度名前を付けると、同じ名前を異なる値に付けることはできなくなります。

そのため、プログラム中では定数は常に一定の値を保ちます。

基本構文

定数を使うには定義してから使います。

定数を定義する

定数を定義する基本構文は次のようになります。

define('定数名', 定数の値)

define関数を使用した定数の定義ですが、関数をご存知でない方は書き方だけ覚えましょう。

定数を使う

定数を使う基本構文は次のようになります。

定数名

サンプルコード

サンプルコードとして、商品の消費税を計算するプログラムをご覧ください。

<?php

// 消費税率を定数として定義
define('TAX', 0.1);

// 商品1の価格
$item1_price = 1000;
// 商品1の消費税を計算
$item1_tax = $item1_price * TAX;
// 商品1の消費税を出力
echo '商品1('.$item1_price.'円)の消費税は'.$item1_tax."円です。\n";

// 商品2の価格
$item2_price = 3000;
// 商品2の消費税を計算
$item2_tax = $item2_price * TAX;
// 商品1の消費税を出力
echo '商品2('.$item2_price.'円)の消費税は'.$item2_tax."円です。\n";

?>
商品1(1000円)の消費税は100円です。
商品2(3000円)の消費税は300円です。

4行目でdefine関数で消費税率を定数TAXとして定義しています。
※定数名は慣例的に大文字のみで付けられます。

そして、TAXを使用して、9行目と16行目で商品1と商品2の消費税を計算しています。
このように定義すると、コード内で変数のように使用することができます。

注意点

定数は1度定義すると、違う値に同じ名前をつけることはできなくなります。
特定の値を一定に保つことを保証するためで、同じ名前を使用するとエラーになります。

<?php

define('TAX', 0.1);
define('TAX', 0.08);

?>
PHP Warning:  Constant TAX already defined in sample.php on line 4

Warning: Constant TAX already defined in sample.php on line 4

メリット

定数はプログラムの安定性を得るために有効です。

サンプルコードでは定数を使用せず、商品価格に0.1を掛け算しても変わらないと思った方もいらっしゃるかもしれません。
確かに定数は数値などを直接記述してもプログラムの動作が変わることはありません。

しかし、消費税率が変更されたらどうでしょうか?
0.1を計算式に記述した場合、0.1の部分を全て書き換える必要があります。

定数を使った場合は定数の定義だけを変更すれば良くなります。

例えば消費税率が5%になった場合は次のようになります。

<?php

// 消費税率を定数として定義
define('TAX', 0.05);

// 商品1の価格
$item1_price = 1000;
// 商品1の消費税を計算
$item1_tax = $item1_price * TAX;
// 商品1の消費税を出力
echo '商品1('.$item1_price.'円)の消費税は'.$item1_tax."円です。\n";

// 商品2の価格
$item2_price = 3000;
// 商品2の消費税を計算
$item2_tax = $item2_price * TAX;
// 商品1の消費税を出力
echo '商品2('.$item2_price.'円)の消費税は'.$item2_tax."円です。\n";

?>
商品1(1000円)の消費税は50円です。
商品2(3000円)の消費税は150円です。

4行目の定数の値を変更するだけで、消費税が期待通りに計算されます。

もし、定数を使わずソースコードを作成し、商品数が1万個あった場合、変更に多大な時間がかかります。

また、1度定義した定数は、以降のプログラムで再定義はできないため、間違えて上書きしてしまうなどの心配もありませんし、定数名を分かりやすく付けることでソースコードの可読性を向上させることもできます。

演習問題

問題1

時間から分数を算出するプログラムを作成してください。
なお、下記の条件を満たすものとします。

  • 1時間あたりの分数は定数として定義
  • 時間はコマンドライン引数で与える
$ php practice.php 3
3時間は180分です。

問題2

キロメートルからセンチメートルを算出するプログラムを作成してください。
なお、下記の条件を満たすものとします。

  • 1キロメートルあたりのメートルは定数として定義
  • 1メートルあたりのセンチメートルは定数として定義
  • キロメートルはコマンドライン引数で与える
$ php practice.php 3.2
3.2kmは320000cmです。

まとめ

定数は値に名前を付けて定義する方法です。
柔軟性のあるプログラムを作れるようになり、仕様に変更があった場合でも極力手間を減らすことができるようになるので、覚えておきましょう。