4

つまり、 asではなく as としてfn()使用されていることがわかりますか?$var = fn();fn();

ユースケースはecho、後者の場合は戻り値になりますが、前者の場合は戻り値になりreturnます。

これは、関数にパラメーターを渡して使用方法を宣言せずに実行できますか?

4

6 に答える 6

7

多くの PHP 関数は、$return と呼ばれるブール値を渡すことでこれを行います。$return が true の場合は値を返し、$return が false の場合は値を出力します。いくつかの例は、print_r()highlight_file()です。

したがって、関数は次のようになります。

function fn($return=false) {
    if ($return) {
        return 'blah';
    } else {
        echo 'blah';
    }
}

他の方法は、適切なプログラミング スタイルではありません。

于 2008-11-02T18:46:13.697 に答える
3

いいえ、そうすべきではありません。関数が使用されるコンテキストを認識しないというのは、言語のかなり基本的な前提です。これにより、各部分 (機能) が周囲から完全に分離されているため、アプリケーションを分解できます。

とはいえ、この特定のユースケースについてできることは、出力バッファリングを有効にすることです。デフォルトで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 ステートメントのみが必要です。

于 2008-11-02T18:35:35.760 に答える
2

インタープリターがこのステートメントをどのように実行するかを考えてみてください。

$var = fn();

インタープリターは、代入演算子を使用してオペランドを右から左に評価するため、最初に右側 (fn()この場合) の式を評価し、次に結果を に代入し$varます。すべての式は値を返します。この値をどうするかはユーザーが選択できます。

于 2008-11-02T19:19:18.777 に答える
0

いいえ、それを見つける方法はありません。あなたができるユニークなことは、コールスタック(http://it2.php.net/debug_backtrace)を取得してそれを検査することです。

于 2008-11-02T17:49:48.363 に答える
0

いいえ、できません。

于 2008-11-02T17:49:59.223 に答える
0

簡単に行うことはできませんが、関数に追加のブール変数を渡した場合はどうなりますか?このようにすると、関数の終わりは次のようになります。

if (namespace) {
    return $output;
} else {
    echo $output;
}

非常に簡単な回避策のようです。

于 2008-11-02T17:54:30.023 に答える