本来のPHP自体には関数の別名(エイリアス)を作る機能はありません。
つまり同じ処理を異なる関数名から呼び出すのは不可能ということ
しかし新バージョンの追加機能や標準関数を使えばそれらしいものを作ることは可能です。
そこでここではPHPで関数エイリアスを作る方法をまとめてみました。
このページの目次
関数エイリアスを作る方法まとめ
その方法とは次の2つ
- call_user_func_array関数を使う
- use演算子を使う(PHP5.6以上)
もしPHP5.6以上を使っているならuse演算子を使うのが一番簡単です。
そしてここでエイリアス化の例として使用するのは次の関数
1 2 3 |
function echo_div( $text ){ echo '<div>' . $text . '</div>'; } |
関数名は echo_div で、引数 $text をdiv要素として表示する処理です。
この関数を print_div という別名でエイリアス化するコード例をそれぞれ説明していきます。
1. call_user_func_array関数を使う
まず1つ目は標準関数 call_user_func_array を使ってエイリアス化する方法
この関数はコールバックを $callback 、引数配列を $param_arr として次のように使用可能
1 |
call_user_func_array( $callback, $param_arra ); |
返り値は $param_arr の引数とともに実行した関数が返した返り値になります。
そしてこれを使って関数をエイリアス化してるのが次のコード例
1 2 3 4 5 6 7 8 9 |
/** オリジナルの関数 */ function echo_div( $text ){ echo '<div>' . $text . '</div>'; } /** エイリアス関数の作成 */ function print_div(){ return call_user_func_array("echo_div", func_get_args()); } |
上コードの func_get_args は呼び出された関数の引数リストを配列で返す関数
なので print_div の宣言時にわざわざ echo_div と同じ引数を書く必要はありません。
ちなみにクラス内関数をエイリアス化する場合は少し注意が必要です。
例えば次はHogeクラス内にある echo_div をエイリアス化しているコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
class Hoge{ /** オリジナルの関数 */ function echo_div( $text ){ echo '<div style="font-weight: bold;">' . $text . '</div>'; } } /** エイリアス関数の作成 */ function print_div(){ return call_user_func_array( array( 'Hoge', 'echo_div'), func_get_args() ); } /** インスタンスから実行 */ $hoge = new Hoge(); $hoge->echo_div('Hello World'); /** エイリアスから実行 */ print_div('Hello World'); |
少し長めですが重要なのは array( 'Hoge', 'echo_div') の部分
クラス関数の場合はcall_user_func_array関数に
「クラス名とその関数名を順番に持つ配列」
を渡す必要があることに注意です。
これはPHP独特の書き方なので慣れないと違和感のある書き方かもしれません。
以上がcall_user_func_array関数を使ったエイリアスの作成方法
PHPバージョンが5.6未満ならこちらを使うのが確実で楽な方法だと思います。
2. use演算子を使う(PHP5.6以上)
PHP5.3.0以上からはエイリアス作成が公式にサポートされています。
そのために使えるのがuse演算子というもの
use演算子を使えばクラス名やインターフェース、名前空間の別名が作れます。
そして関数についてはPHP5.6以降からuse演算子がサポートされるようになりました。
例えば元の関数名を func 、エイリアス関数を alias とすると次のような書き方が可能
1 |
use function func as alias; |
これだけで alias が完全に func の別名になります。
ちなみにPHP5.6移行なら関数だけでなく定数などもエイリアス化できるみたいです。
実際にこれを使って関数をエイリアス化しているのが次のコード例
1 2 3 4 5 6 7 8 9 10 11 12 |
/** オリジナルの関数 */ function echo_div( $text ){ echo '<div>' . $text . '</div>'; } /** 関数エイリアスを作成 */ use function echo_div as print_div; /** オリジナル関数を実行 */ echo_div('Hello World'); /** エイリアス関数を実行 */ print_div('Hello World'); |
手順的には call_user_func_array を使った方法より簡単ですね。
機能的にもPHPでサポートされているので、確実で安全な方法かも
クラスや定数のエイリアスを作るには・・・
ここまでが関数エイリアスの作成方法
これに加えてPHPではクラスや定数名などのエイリアスにも対応しています。
まずはクラスの別名を作る場合、
元のクラス名を Origin 、エイリアス名を Alias とすると次のように書くことが可能
1 |
use Origin as Alias |
参考記事 : PHPでクラスのエイリアス(別名)を作成する方法
そして次は定数の別名を作りたい場合、
元の定数名を FOO 、エイリアス定数名を BAR とすると次のように書くことが可能
1 |
use const FOO as BAR; |
参考記事 : PHPで定数のエイリアス(別名)を作成する2つの方法
対応PHPバージョンについては
- クラスの場合 ⇒ PHP5.3.0以上
- 定数の場合 ⇒ PHP5.6以上
からサポートされました。
ただし関数と同じく定数もPHP5.6以上からしか使えないことに注意です。
ここまでのまとめ
ということで関数エイリアスを作る方法まとめ
- call_user_func_array関数を使う
例えば関数 func をエイリアス化する関数 alias 内で
1return call_user_func_array("func", func_get_args());のように書けばそれが func のエイリアスになる
- use演算子を使う(PHP5.6以上)
元関数を func 、エイリアス関数を alias とすると
1use function func as alias;のような書き方でエイリアス化が可能
基本的にはどっちを使っても問題はありません。
ただ分かりやすくてバグなどが入り込みにくいのはuse演算子を使う方法だと思います。
以上PHPで関数の別名(エイリアス)を作る方法についてでした。