つまり、 asではなく as としてfn()
使用されていることがわかりますか?$var = fn();
fn();
ユースケースはecho
、後者の場合は戻り値になりますが、前者の場合は戻り値になりreturn
ます。
これは、関数にパラメーターを渡して使用方法を宣言せずに実行できますか?
多くの PHP 関数は、$return と呼ばれるブール値を渡すことでこれを行います。$return が true の場合は値を返し、$return が false の場合は値を出力します。いくつかの例は、print_r()とhighlight_file()です。
したがって、関数は次のようになります。
function fn($return=false) {
if ($return) {
return 'blah';
} else {
echo 'blah';
}
}
他の方法は、適切なプログラミング スタイルではありません。
いいえ、そうすべきではありません。関数が使用されるコンテキストを認識しないというのは、言語のかなり基本的な前提です。これにより、各部分 (機能) が周囲から完全に分離されているため、アプリケーションを分解できます。
とはいえ、この特定のユースケースについてできることは、出力バッファリングを有効にすることです。デフォルトでecho
はデータを stdout に送信しますが、代わりに変数に出力をキャプチャするバッファを設定できます。例えば:
function foo() {
echo "Hello World";
}
foo(); // will output "Hello World"
ob_start();
foo();
$foo = ob_get_clean(); // will assign the string "Hello World" into the variable $foo
それに加えて、関数を直接出力することは一般的に悪いスタイルと考えられています。通常、文字列を返し、スクリプトの最上位レベルで出力するためにそのままにしておく必要があります。理想的には、アプリケーション全体で 1 つの echo ステートメントのみが必要です。
インタープリターがこのステートメントをどのように実行するかを考えてみてください。
$var = fn();
インタープリターは、代入演算子を使用してオペランドを右から左に評価するため、最初に右側 (fn()
この場合) の式を評価し、次に結果を に代入し$var
ます。すべての式は値を返します。この値をどうするかはユーザーが選択できます。
いいえ、それを見つける方法はありません。あなたができるユニークなことは、コールスタック(http://it2.php.net/debug_backtrace)を取得してそれを検査することです。
いいえ、できません。
簡単に行うことはできませんが、関数に追加のブール変数を渡した場合はどうなりますか?このようにすると、関数の終わりは次のようになります。
if (namespace) {
return $output;
} else {
echo $output;
}
非常に簡単な回避策のようです。