PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPの可変関数(Variable Functions)とは?基本からクラスメソッドへの応用まで解説

はじめに

PHPでは、変数名の後ろに括弧(引数の有無は問いません)を付けると、PHPパーサーはその変数の値と同じ名前の関数を探し出し、実行しようとします。このような関数の呼び出し方は「可変関数(Variable Functions)」と呼ばれます。この機能は、コールバック処理や関数テーブルなどを実装する際に非常に便利です。

ただし、include、require、echo などの言語構造(言語キーワード)に対して可変関数の形式を使うことはできません。そのような場合は、関数でラップするなどの回避策を取る必要があります。

可変関数の基本的な例

次の例では、変数の値が関数名と一致しています。変数の後ろに括弧を付けるだけで、その名前の関数が呼び出されます。

コード例

<?php
function hello(){
   echo "Hello World";
}
$var="Hello";
$var();
?>

出力結果

Hello World

引数を渡す可変関数

可変関数には、通常の関数とまったく同じように引数を渡すこともできます。次の例では、2つの数値を受け取って合計を表示する関数を、変数経由で呼び出しています。

コード例

<?php
function add($x, $y){
   echo $x+$y;
}
$var="add";
$var(10,20);
?>

出力結果

30

ユーザー入力による関数の動的な呼び出し

可変関数を使うと、実行時に呼び出す関数を動的に決めることもできます。次の例では、呼び出したい関数の名前をユーザーが入力し、その名前に対応する関数が実行されます。

コード例

<?php
function add($x, $y){
   echo $x+$y;
}
function sub($x, $y){
   echo $x-$y;
}
$var=readline("enter name of function: ");
$var(10,20);
?>

出力結果

enter name of function: add
30

クラスのメソッドでも使える可変関数

可変関数の考え方は、クラスのメソッドにもそのまま応用できます。オブジェクトのプロパティとしてメソッド名を格納した変数を用意し、アロー演算子(->)で呼び出すだけでOKです。

コード例

<?php
class myclass{
   function welcome($name){
      echo "Welcome $name";
   }
}
$obj=new myclass();
$f="welcome";
$obj->$f("Amar");
?>

出力結果

Welcome Amar

静的メソッドの呼び出し

静的メソッド(staticメソッド)も、可変メソッドの手法を使って呼び出すことができます。この場合は、スコープ定義演算子(::)を利用します。

コード例

<?php
class myclass{
   static function welcome($name){
      echo "Welcome $name";
   }
}
$f="welcome";
myclass::$f("Amar");
?>

出力結果

Welcome Amar

まとめ

可変関数を活用すると、変数の値に応じて実行する関数やメソッドを柔軟に切り替えられます。コールバックやプラグイン的な仕組みを実装する際に強力なテクニックなので、ぜひ覚えておきましょう。ただし、ユーザー入力をそのまま関数名として使う場合は、意図しない関数が実行されないよう、許可リストによるチェックなど適切なバリデーションを行うことが重要です。

  1. PHPのfilter_input()関数とは?使い方とパラメータを解説

    PHPのfilter_input()関数は、GETやPOSTなど外部から送信された変数を名前で取得し、必要に応じてフィルタリング(検証・サニタイズ)を行うことができる関数です。ユーザー入力を安全に扱うための重要な関数の一つであり、セキュリティ対策の観点からも広く利用されています。構文filter_input(type, var, filtername, options)パラメータtype − チェック対象となる入力の種類を指定します。指定できるのは以下の5種類です。INPUT_GET、INPUT_POST、INPUT_COOKIE、INPUT_SERVER、INPUT_ENVvar − 取得し

  2. PHPのextract()関数とは?使い方とパラメータを徹底解説

    extract()関数とはPHPのextract()関数は、配列のキーと値を現在のシンボルテーブルに変数としてインポートする関数です。連想配列の各要素が「キー名=変数名、値=変数の値」として展開され、戻り値としては正常に抽出された変数の個数が返されます。構文extract(arr, rules, prefix)パラメータarr − 変数として展開したい対象の配列を指定します。rules − 無効な変数名や既存変数との衝突(コンフリクト)が発生した場合の扱い方を指定します。指定できる値は以下の通りです。EXTR_OVERWRITE − デフォルト値。同名の変数が既に存在する場合、既存の変数を上書