PHPで定数定義するときはdefine()よりもconstを使うべき

  • 41
    いいね
  • 2
    コメント

PHPで定数を定義する場合、define関数とconstキーワードの2種類の方法がある。

<?php
define('HOGE', 'hoge');
const FUGA = 'fuga';

見て分かる通り、defineは関数であるのに対しconstは関数ではないのでconstの方が高速に処理される。
大量に定数定義したいならconstを使う方が望ましい。

その昔「定数定義を高速に行う」というためだけの関数がいくつか存在していたが、いずれも拡張モジュールのメンテナンスが止まっているようなので、今やるならconst書き換えが現実的なチューニング法なんじゃないかな。
http://php.net/manual/ja/function.apc-define-constants.php
https://pecl.php.net/package/hidef

defineでしかできないこと

defineは関数なので、引数には式であれば何でも書くことができる。関数の実行結果を書いてもOK。

<?php
define('APP_PATH', dirname(__DIR__, 2));

こういうdefineはconstに書き換えることはできない。
ちなみに名前空間つきの定数もdefineで定義することができる。

<?php
define('Foo\Moo\APP_PATH', dirname(__DIR__, 2));
echo Foo\Moo\APP_PATH;

constでしかできないこと

クラス定数はconstでしか定義できない。ちなみに通常の定数をdefineでなくconstで定義できるようになったのは、PHP5.3から。

<?php
class A
{
    const HOGE = 'hoge';
}

constの右辺に書けるもの

任意の式が書けないのでconstでは書けないものが存在するが、定数であれば書くことができる。なので別の定数も書くことができる。

<?php
const DIR = __DIR__;
const HOGE = FooClass::HOGE;

配列定数について

割と最近のPHPの機能として配列定数がある。

PHP5.6からconstでなら配列定数を定義できるようになり、PHP7からdefineでも配列定数を定義できるようになった。