24

PHPは、二重引用符で囲まれた文字列での変数補間をサポートしています。たとえば、

$s = "foo $bar";

しかし、関数呼び出しの結果を二重引用符で囲まれた文字列に補間することは可能ですか?

例えば、

$s = "foo {bar()}";

そんな感じ?それは不可能ではないようですよね?

4

3 に答える 3

25

Overvの答えが示すように、文字列から関数名への呼び出し手法を使用することは絶対に可能です。多くの些細な置換の場合、次のような代替構文よりもはるかに読みやすくなります。

"<input value='<?php echo 1 + 1 + foo() / bar(); ?>' />"

パーサーは$がそこにあることを期待しているため、変数が必要です。

これは、アイデンティティ変換が構文ハックとしてうまく機能する場所です。恒等関数を宣言し、スコープ内の変数に名前を割り当てるだけです。

function identity($arg){return $arg;}
$interpolate = "identity";

次に、有効なPHP式を関数の引数として渡すことができます。

"<input value='{$interpolate(1 + 1 + foo() / bar() )}' />"

利点は、多くの些細なローカル変数とエコーステートメントを排除できることです。

欠点は、$ interpolate変数がスコープ外になるため、関数とメソッド内でグローバルに繰り返し宣言する必要があることです。

于 2013-03-14T13:21:33.167 に答える
5

PHPの二重引用符機能は、PHPコードを評価せず、変数をその値に置き換えるだけです。PHPコードを実際に動的に(非常に危険に)評価したい場合は、以下を使用する必要がありますeval

eval( "function foo() { bar() }" );

または、関数を作成したいだけの場合:

$foo = create_function( "", "bar()" );
$foo();

これは、他に選択肢がない場合にのみ使用してください。

于 2012-05-25T17:05:01.817 に答える
0

補間がどうしても必要な場合を除いて(コメントして理由を教えてください)、関数の出力を文字列と連結します。

$s =  "foo " . bar();

出典:1.8。文字列内の関数と式の補間

于 2017-02-02T21:51:38.927 に答える