こんにちは、
最近ではめっきり寒くなって週末はほぼ毎週鍋を食べているサトウです。
さて、本題に入りたいと思います。
phpで「定数」を定義するために使う「const」。
phpを学び始めた方は目にしたこともある方もいらっしゃるのではないでしょうか。
そんな「定数」を定義する「const」、理解できない方も少なくないのでは、、、。と思い、今回は「const」について分かりやすく説明していきます。
目次
プログラミング言語でなぜ定数が必要か
constの書き方を解説する前に、「定数」の考え方とプログラミングでなぜ「定数」という概念が必要かという点について考えてみましょう。
変数と定数の違い
「定数」とは一度設定した値を格納し、固定するものです。
「変数」は何度も値を変更することができますが、定数では一度設定した値を変更することができません。
ここが変数と定数との大きな違いです。
定数のメリット
定数のメリット①別の値が入るのを防いでくれる点
定数を使う最大のメリットは予期せぬ値が入ることを防いでくれる点です。
実際のソースコードで見ていきます。
比較のためまずは変数を使った場合から確認していきます。
変数の場合
1 2 3 4 5 6 7 |
<?php //変数$numに値を格し、echoで出力 $num = 1; $num = 2; $num = 3; echo $num.'<br>'; |
出力するとこうなります。
中身
変数の場合、変数の中に格納した中身(値)は変わっていくものです。いくつか値を格納していくと、最終的には最後に格納した値が中に入るようになっています。今回の例だと最後に格納した数値の「3」が表示されます。
ここはプログラミングを学習中の方であれば何となくイメージしやすいですよね。
定数の場合
次に定数の場合の例がこちらです。
TEST_CONSTという定数を作ったのでそこに値を2つ入れてみます。
1 2 3 4 5 6 |
<?php //定数constを使う場合 const TEST_CONST = 'TEST_CONSTの中身です'; const TEST_CONST = 'TEST_CONSTの中身を変えたいです'; echo TEST_CONST; |
出力すると以下のようなエラーメッセージが表示されてしまいます。
エラーの内容は、
「定数TEST_CONSTには既に中身が入っています。エラーです。」といった内容です。
定数は一度定義して値を入れると後から中身を変更することができません。
このように定数に決められた値以外を格納できないようにすることで、誤って別の値が入ることを防いでくれるのが分かります。
実際にシステム開発では以下のような例があります。
「商品購入ページはこちら」をクリックして、商品購入サイトに遷移する場合
「提携先企業A社のHP」はこちらという箇所をクリックしてA社のHPに遷移する場合
それぞれ正しいリンクを表示すべきところが、誤って別の値が入ってしまった時はどうでしょうか。
対象のURLへ正しく遷移できないだけでなく、URLにアクセスできないというだけで数秒・数分で多大な機会損失になってしまいますよね。
こいうった場合に「定数」を利用し、中に不変の値(この例であれば企業のURL)を格納しておくのが良いです。
定数のメリット②:コードの保守性が向上する点
さらに定数を使うとソースコードを修正する時にも非常に楽です。
システムを運用していくとユーザーが使いやすいようにソースコードを修正していく作業(保守・改修業務)があります。
・定数を定義して中身を格納する
・必要な時にそれを呼び出す
この点意識してコードを書くと、修正時には修正箇所は少なく済みます。
例えば以下だと、「’エラーがあります’」という文言を修正したい時にはそこを修正すれば済みます。
もし定数を使っていないと「’エラーがあります’」と出力される箇所が複数ある場合、該当箇所をすべて修正しなければならないので修正する時間・コスト増えてしまいます。
1 2 3 4 5 6 7 8 9 |
<?php //定数にエラーメッセージを格納 const ERR_MSG = 'エラーがあります'; //定数の呼び出し echo ERR_MSG; ?> |
このように絶対に値や中身を変更したくない場合やコードの保守性を考慮すると「定数」は非常に使い勝手が良くなります。
「定数」の必要性についてご理解頂けたかと思います。
constクラス定数の使い方
ここからは定数のメソッドであるconstの使い方について確認してきいきましょう。
constの書き方
constの書き方
(1)定数を定義
const 定数名 = ‘格納する値’;
(2)定数の呼び出し
echo 定数名;
<留意点>
定数は通常の変数と区別するために、アルファベットの大文字で記述するのが慣例となっています。
constは通常の変数のように定数を定義することができますが、変数の先頭に$の記号は付けないので注意しましょう。
MSGという定数にメッセージという文字列を格納
1 2 3 4 5 6 7 |
<?php //(1)MSGという定数にメッセージという文字列を格納 const MSG = 'メッセージ'; //(2)定数MSGの呼び出し echo MSG; |
使い方は比較的シンプルですよね。
constとdefineの違い
またphpでは定数を定義する際、defineという関数も使用することができます。constとの違いは主に以下の点です。
・defineは関数であるのに対しconstは関数ではないのでconstは構文(関数ではない)。
この場合、constの方が早く処理できる。
・defineは変数や、関数の戻り値を使えるがconstは利用できない
以下の例では変数$valに文字列を格納して、第二引数に指定しています。
1 2 3 4 5 6 7 8 9 10 |
<?php //(1)変数に中身を格納 $val = 'defineで使用'; //(2)定数を定義 define('DEFINE_TEST',$val); //(3)定数の呼び出し echo DEFINE_TEST; ?> |
・constはifやfor functionの中では使用できない。
・defineはクラス定数を定義するときに使用できず、constしか使用できない。
※プログラミングのオブジェクト指向でクラスという「設計図」のような概念を定義する場合があります。
その際はconstしか利用できない、ということになります。
constとdefineはこのような点で異なります。
違いを見ると自作関数や変数を入れてプログラムを組みたい時はdefine、一方でシンプルな文字列を固定値にしておく時はconstを使用すると良さそうですね。
是非、仕様や条件・ご自身で作成したい制作物によって使い分けてみてください。
まとめ
いかがでしたか?今回は、phpで定数を定義するconstについて説明しました。
プログラミングを学び始めた頃や、「定数」「変数」をどのように活用していくかややこしく感じることあると思います。ですが量をこなしていくと簡単に使えることができる日が来ると思うので、焦らずにゆっくりと理解を深めていってくださいね。
この記事が、phpの学習に役立つと嬉しいです。