2016-05-02 12 views
0

PHPはvariable functionsをサポートしています。例えば。 $str == 'testfunc';の場合は$str();となり、testfunc()となります。私はfuncname()prefix_funcname()のような機能をテストするためにこれを使用したいと思います。私は何かをすることができると思っていた...可変関数呼び出しの文字列を前に付加

${$prefix . 'funcname'}は動作しません。このエラーは次のとおりです。

Notice: Undefined variable: funcname 

Fatal error: Function name must be a string 

私はいくつかのバリエーションを試してみましたが、成功しませんでした。私は$funcname = $prefix . $functname; $ funcname(); `を実行するのではなく、1行ですべてをやりたいのです。

アイデア?

+1

私はあなたが探していると思います: 'call_user_func()' – Rizier123

+0

_string_関数ではない_variable_関数であるため、2行または@ Rizier123ウェイが唯一の方法です。 – AbraCadaver

答えて

1

これはPHP 5.6でタグ付けされています。正しい答えは、2行(実際に必要が感じられる場合は実際には同じ行に置くことができます)またはcall_user_funcまたはcall_user_func_arrayのいずれかを使用することです。

構文の制限の周りの作業は物事が一度に行わ取得する方法を求めて多くの人の質問に、右あなたが使用できるPHP 7におけるアップUniform Variable Syntax RFC修正のもののように:

($prefix . 'funcname')(); 

このRFCは下-感謝はなはだしくです。


は、ここでのことだ、あなた実際には、以前のバージョンで何をしようとして行うことができます。

金田。

警告:これは嫌です。他のプログラマーからの報復の危険性があります。

${${$prefix . 'funcname'} = $prefix . 'funcname'}(); 

それは絶対に恐ろしいですが、それは(そしておそらくそれ以前、私は気にしませんでしたしようとしています。)それはすべてのは$prefix = "prefix_";を言わせて説明の便宜上

PHPのサポートされているすべてのバージョンで動作します。

最初に${$prefix . 'funcname'}は、$prefix_funcnameに解決するvariable variable(これらは使用しないでください)を作成します。

ので

${$prefix . 'funcname'} = $prefix . 'funcname' 

$prefix_funcname = "prefix_funcname" 

にうまくいくと${...}を最も外側the value of an assignment expression is the value assigned"prefix_funcname"を取得し、あなたは再び我々はすでに値を与えてくれた$prefix_funcnameに解決する変数の変数を与えるので、 "prefix_funcname"

prefix_funcname()への可変関数呼び出しを残しておきます。

しないでください。

関連する問題