PHPのdefine関数を使うことで、値を更新できない定数を定義できます。普段使い慣れている変数とは、使い方の違いもいくつかあります。
そこで今回は、define関数の使い方について解説していきます。define関数で定義する定数名などには、注意すべきポイントがいくつかあります。この機会にぜひご覧ください。
目次
PHPのdefine関数とは
PHPのdefine関数とは、定数を定義する場合に使用する関数です。define(デファイン)は日本語で「定義する」または「限定する」といった意味があります。
define関数を使用して、定数を定義すると、その定数は値を変えることができなくなります。そのため、定数にはプログラム中で書き換えられると困るような情報を格納して、間違っても値の更新ができないように保護します。
一方、定数に対して値を変更できるものを、変数と呼びます。変数は、その時々で値を更新し、更新された値に対して様々な処理を行うことで、プログラムを動かします。
また、定数と変数を使い分けることは、その値の意味を宣言する役割もあります。複数人で開発している場合、定数は読み取り専用の値が格納されていることを意味します。これは、ソースコードの可読性を高める効果があります。
こういった背景もあり、定数名は大文字で表記し、変数名は小文字で表記するなどといった使い分けをするのが一般的です。
PHPのdefine関数で定数を定義する方法
それでは実際に、PHPでdefine関数で定数を定義する方法についてみていきましょう。
まず、define関数を使って、定数を定義するときには、次のように記述します。
1 |
define(定数名, 値 [, 大文字と小文字の区別フラグ]); |
各引数の詳細は次の通りです。
- 第一引数:定数名(英文字か”_(アンダースコア)”を使用可能)
- 第二引数:値(定数を呼び出したときに返す値)
- 第三引数:大文字と小文字の区別を指定。省略時は区別しない
define関数は、定数名の大文字小文字を明確に区別します。区別しないようにするには、第三引数に「true」を指定します。ただし、定数名は大文字で記述して、変数名と区別するのが一般的です。特別な理由がなければ第三引数は省略して、大文字で定数名を記述するのが良いでしょう。
define関数で定義した定数の使い方
define関数で定義した定数の使い方は、変数を使うときとは少し違います。
PHPプログラミングでは、定数は次のように使用してください。
1 2 3 4 5 6 7 8 9 10 |
<?php // 定数を定義 define('TAX', 1.1); $price = 100; echo '税込' . $price * TAX . '円'; ?> |
上記サンプルコードでは、定数名として「TAX」を定義しました。定数には、変数のように$(ダラー)を付けません。
また、define関数で定義した定数は更新することができません。そこで、試しに同じプログラム内でdefine関数を再定義した結果もみてみましょう。
1 2 3 4 5 6 7 8 9 10 11 |
<?php // 定数を定義 define('TAX', 1.1); // 1回目 define('TAX', 1.08); // 2回目 $price = 100; echo '税込' . $price * TAX . '円'; ?> |
税込110円
上記サンプルコードでは、define関数を使い、同じ定数を2回定義しました。しかし、定数の更新はできないため、エラーメッセージが出力され、最初に定義した値で計算された値が出力されました。
大文字小文字を区別しない定数を定義する
define関数では、第三引数に「true」を指定することで定数名の大文字と小文字を区別しなくなります。
実際にソースコードを作って、動作を確認してみましょう。
1 2 3 4 5 6 7 8 9 10 11 |
<?php // 定数を定義 define('SAMPLE', 'OK', true); echo 'SAMPLE:' . SAMPLE . '<br>'; echo 'sample:' . sample . '<br>'; echo 'samPLE:' . samPLE . '<br>'; echo 'SaMpLe:' . SaMpLe . '<br>'; ?> |
sample:OK
samPLE:OK
SaMpLe:OK
上記の通り、define関数の第三引数に「true」を指定したため、定数名の大文字と小文字を区別せずに出力されました。なお、「false」を指定すると大文字と小文字を区別します。第三引数を省略した場合も「false」同様、区別されます。「true」を指定することは非推奨な書き方です。基本的には避けるようにしましょう。
PHPのdefineとconstの違い
PHPで定数を定義する方法には、define関数を使用するだけでなく、constを使う方法もあります。
constとは、PHPのクラス内で定義するオブジェクト定数のことです。constもdefine関数で定義した定数と同じで、値の更新はできず、大文字表記が一般的です。
なお、define関数とconstの違いは次の通りです。
- defineは関数。呼び出しに時間がかかる
- constは構文。関数じゃないので速い
- constはクラス内部で定義できるが、defineはできない
上記がdefine関数とconstの主な違いです。
define関数は呼び出しに時間がかかるため、特定のクラスでしか利用しない定数にはconstを使います。一方、constはクラス内部でしか定数を定義できないため、広域な意味をもつ定数を定義したい場合には、define関数を使います。
定数の使用範囲にあわせてdefine関数とconstを使い分け、軽快に動作するシステムを開発しましょう。
まとめ
PHPプログラミングにおいて、定数を定義したい場合にはdefine関数を使います。define関数で定義した定数は、値を更新することができません。引数を指定することで、大文字と小文字の区別をすることもできますが、定数名は全て大文字で表記するのが一般的です。
なお、define関数の他にもconstで定数を定義する方法もあります。2つの違いを理解して、使い分けることができれば、軽快に動作するシステム開発に少なからず近づくといえるでしょう。