const とか define で作った定数のエイリアス(別名)を作りたい・・・
その場合は2通りの方法で作成できます。
ここではPHPで定数エイリアスを作成する2つの方法についてまとめました。
このページの目次
PHPの定数について簡単に説明
一応最初に定数について説明したいと思います。
定数というのは「後から変更のできない固定された値」のこと
PHPの場合、 const またはdefine関数を使うことで作成可能です。
例えば次は const を使った定数宣言の例
1 2 |
/** 定数の宣言 */ const PI = 3.14; |
普通の変数と違って名前の前に $ を付けてはいけないことに注意
また同じようにdefine関数を使っても定数は作れます。
例えば次がdefine関数を使った定数宣言の例
1 2 |
/** 定数の宣言 */ define( 'PI', 3.14 ); |
第1引数に定数名、第2引数に値を渡すだけ
あとは普通にコード内で定数が使えるようになります。
参考記事 : PHPでの変数・参照・定数の宣言の仕方まとめ
以上がPHPでの定数の宣言方法
const または define のどちらかを使って作ればOKです。
定数エイリアスを作る2通りの方法
PHPで定数エイリアスを作る方法は次の2つ
- 別名の定数に同じ値を代入
- use演算子を使う(PHP5.6以上)
思いつきやすいのは1番目の別名の定数名を作って代入すること
しかしPHP5.6以上なら正式に定数のエイリアス作成機能がサポートされました。
なので5.6以上ならそちらを使うのが確実です。
この2つの具体的なやり方とコード例はそれぞれ次の通り
方法1. 別名の定数に同じ値を代入
ある定数の値を別の定数名に代入するだけです。
古いバージョンのPHPを使っている場合はこちらの方法しか使えません。
例えば次はこの方法で定数エイリアスを作っているコード例
1 2 3 4 5 6 7 |
const FOO = 'something'; const BAR = FOO; print_r(FOO); /// => something print_r(BAR); /// => something |
上コードだと FOO という定数を別の定数 BAR に代入しています。
定数の別名を作る方法としてはこれが一番シンプルですね。
ただしこの方法をクラス内で使うときは少し注意が必要です。
例えば次はクラス内定数のエイリアスを作っているコード例
1 2 3 4 5 6 7 8 9 |
class Hoge{ const FOO = 'something'; const BAR = Hoge::FOO; } print_r(Hoge::FOO); /// => something print_r(Hoge::BAR); /// => something |
普通に const BAR = FOO; と書いてはいけません。
上コードのようにクラスまで含め Hoge::Foo として代入する必要があります。
なのでクラス内で定数エイリアスを作る場合はこれに要注意です。
もし間違って BAR = FOO; と書くと BRA に未定義の値が入っていまいます。
方法2. use演算子を使う(PHP5.6以上)
PHP5.3.0以上ではエイリアス作成が正式にサポートされました。
具体的にはuse演算子というものを使ってクラスや名前空間の別名が作成できます。
そしてさらにPHP5.6以上だと定数のエイリアスも作ることが可能です。
例えば定数名を FOO 、エイリアス定数名を BAR とすると次のような書き方
1 |
use const FOO as BAR; |
これで FOO の別名として BAR という定数が作成されます。
本当に作成できているかは次のコードを実行してみると分かるはず
1 2 3 4 5 6 7 |
const FOO = 'something'; use const FOO as BAR; print_r(FOO); /// => something print_r(BAR); /// => something |
上コードのコメントを見れば分かるようにどちらも同じ値を出力しています。
ちなみに use を使ってクラス内定数のエイリアス作成はできないので注意してください。
例えば次のようなコードを書いたとします。
1 2 3 4 |
class Hoge{ const FOO = 'something'; use const Hoge::FOO as Hoge::BAR; } |
これでも問題なさそうですが、次のようなエラーが出て怒られてしまいます。
1 |
PHP Parse error: syntax error, unexpected 'const' (T_CONST), expecting identifier (T_STRING) or namespace (T_NAMESPACE) or \\ (T_NS_SEPARATOR) |
なのでクラス内定数の場合は先ほどの別名の定数に代入する方法を使うしかなさそうです。
他に書き方があるかもですが、自分の今の知識では分かりません。
もしかしたらuseを使ってクラス内定数エイリアスを作る方法もあるかも・・・
クラスや関数のエイリアスを作るには・・・
ここまでが定数エイリアスの作成方法
これに加えてPHPではクラスや関数名などのエイリアスにも対応しています。
まずはクラスの別名を作りたい場合、
元のクラス名を Origin 、エイリアス名を Alias とすると次のように書くことが可能
1 |
use Origin as Alias |
参考記事 : PHPでクラスのエイリアス(別名)を作成する方法
そして次は関数の別名を作りたい場合、
元関数名を func 、エイリアス関数名を alias とすると次のように書くことが可能
1 |
use function func as alias; |
参考記事 : PHPで関数のエイリアス(別名)を作成する2つの方法
対応PHPバージョンについては
- クラスの場合 ⇒ PHP5.3.0以上
- 関数の場合 ⇒ PHP5.6以上
からサポートされました。
定数と同じく関数はPHP5.6以上からしか使えないので要注意
ここまでのまとめ
ということで定数エイリアスを作る方法まとめ
- 別名の定数に同じ値を代入
例えば BAR = FOO; のように書くことが可能
PHP5.6未満を使っている場合はこちらの方法を使う必要あり - use演算子を使う(PHP5.6以上)
例えば use const FOO as BAR; のように書くことが可能
ただし定数エイリアスのサポートはPHP5.6以上であることに注意
僕自身は別名の定数に代入する方法を使うことが多いです。
以上PHPで定数エイリアスを作成する方法まとめでした。