PHPで関数を作成し、関数の名前を知らずに呼び出したい。
これは可能ですか?
例:
<?php
$functionName = "someName";
$this->$functionName();
function someName(){
echo("Print Message");
}
?>
PHPで関数を作成し、関数の名前を知らずに呼び出したい。
これは可能ですか?
例:
<?php
$functionName = "someName";
$this->$functionName();
function someName(){
echo("Print Message");
}
?>
あなたが望むように見えますcall_user_func()
。
$functionName = "someName";
call_user_func($functionName); //calls `someName()`
次のように使用できます。出力は、印刷されたメッセージ「Hello、World!」です。
function someName($val){
return $val;
}
$functionName = "someName";
echo call_user_func($functionName, "Hello, World!");
注:新しいバージョンのPHPを使用している場合は、@J.Bruniが指摘したように呼び出し可能ファイルを使用することもできます。
$functionName = "someName";
$functionName(); //also calls `someName()`
はい、それは簡単です:
$functionName();
それでも、他にもいくつかのオプションがあり、より複雑なものを許可します。チェックしてください:
http://php.net/manual/en/language.types.callable.php
例のコレクション:
function test() { echo 'hello 1'; }
class Something { function test() { echo 'hello 2'; } }
class Other { static function test() { echo 'hello 3'; } }
$functionName = 'test';
$object = new Something();
$className = 'Other';
// three ways to call function "test", showing how to pass parameters
$functionName($param1, $param2);
call_user_func($functionName, $param1, $param2);
call_user_func_array($functionName, array($param1, $param2));
// two ways to call "Something::test"
$object->$functionName();
call_user_func(array($object, $functionName));
// a way to call "Other::test"
call_user_func(array($className, $functionName));
重要:関数を呼び出す前に、関数を宣言する必要があります。(あなたの質問では、関数を呼び出そうとした後に関数を宣言しています。これは機能しません。)
エラーを回避するために、関数を使用して、is_callable
実際に呼び出す前に関数/メソッドが呼び出せるかどうかを確認できます。
call_user_func()はあなたの問題を解決します!
$function = 'myOwnFunction';
call_user_func( $functionname );
致命的なエラーを回避するために、
function_exists($function);
それと!