第02回: 定数

章: 第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_NAMETAX_RATE のように)。

変数との違いをおさえる

変数 定数
記法 $name = 'Taro' define('NAME', 'Taro')
上書き できる できない
$ つける つけない

定数に値を再代入しようとしても、PHPは無視するだけでエラーにはなりません(厳密には Notice が出ます)。気づきにくいバグになることもあるので、「変わらない値は最初から定数で書く」習慣をつけておくと安心です。

つまずきやすいポイント

定数名を小文字で書いても動くことはありますが、大文字が慣習です。チームのコードと混ざったときに見た目がちぐはぐになるので、最初から大文字に統一しておきましょう。

もう一つ、const をif文の中など条件分岐の内側に書くとエラーになります。


<?php
if (true) {
    const SITE_NAME = 'MyBlog'; // これはエラー
}

条件によって値を変えたいときは define() を使うか、そもそも変数で対応します。

まとめ

定数は「このコードが動いている間は絶対に変わらない値」に使います。消費税率やAPIのエンドポイントURLなど、設定値の類いは積極的に定数化しておくと、後からコードを読んだときに意図が伝わりやすくなります。

変数と定数をうまく使い分けるだけで、コードの読みやすさがぐっと上がります。

Related Articles