136
138

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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でも配列定数を定義できるようになった。

136
138
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
136
138

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?