章: 第1章: 文法の土台
定数って何?
変数と似ていますが、一度セットしたら変更できない値を扱うのが定数です。
たとえば消費税率や、アプリ名など「途中で書き換えてはいけないもの」を定数にしておくと、うっかり上書きするミスを防げます。変数と使い分けることで、コードを読んだ人が「これは変わらない値だ」とすぐ判断できるようにもなります。
まずコードを動かしてみる
PHPで定数を定義する方法は2つあります。
<?php
define('APP_NAME', 'MyBlog');
const TAX_RATE = 0.10;
echo APP_NAME; // MyBlog
echo TAX_RATE; // 0.1
define() は関数、const はキーワードです。どちらも定数を作れますが、const はファイルのトップレベルやクラス内でしか使えません。最初のうちは define() を使っておけば迷いにくいです。
変数と違って $ をつけません。また名前は慣習的にすべて大文字で書きます(APP_NAME や TAX_RATE のように)。
変数との違いをおさえる
| 変数 | 定数 | |
| 記法 | $name = 'Taro' |
define('NAME', 'Taro') |
| 上書き | できる | できない |
$ |
つける | つけない |
定数に値を再代入しようとしても、PHPは無視するだけでエラーにはなりません(厳密には Notice が出ます)。気づきにくいバグになることもあるので、「変わらない値は最初から定数で書く」習慣をつけておくと安心です。
つまずきやすいポイント
定数名を小文字で書いても動くことはありますが、大文字が慣習です。チームのコードと混ざったときに見た目がちぐはぐになるので、最初から大文字に統一しておきましょう。
もう一つ、const をif文の中など条件分岐の内側に書くとエラーになります。
<?php
if (true) {
const SITE_NAME = 'MyBlog'; // これはエラー
}
条件によって値を変えたいときは define() を使うか、そもそも変数で対応します。
まとめ
定数は「このコードが動いている間は絶対に変わらない値」に使います。消費税率やAPIのエンドポイントURLなど、設定値の類いは積極的に定数化しておくと、後からコードを読んだときに意図が伝わりやすくなります。
変数と定数をうまく使い分けるだけで、コードの読みやすさがぐっと上がります。