1

関数に戻り値が必要かどうか、またはプロシージャとして実行できるかどうかを知りたい条件を記述したいと考えています。基本的には次のようになります。

foo($x) {
    $x++;
    echo $x;
    if(is_return_needed()) {
        return $x;
    }
}

is_return_needed() は、戻り値が必要な場合の条件です。

そして、それがどのように機能するか:

echo foo(50); // should print AND return 51
bar(foo(50)); // should print AND return 51 to bar() function
foo(50); // should only print the value, because the returned value will not be used

そして、これを行う理由がないと私に言わないでください。条件となる追加のブール値引数を関数に送信できることはわかっていますが、これを達成するためのより良い方法はありますか?

4

1 に答える 1

1

オブジェクト (または大きな文字列) を返す場合、PHP はそのオブジェクト/文字列のコピーを作成しません。つまり、単独で戻っても、アプリケーションの速度が低下することはありません。それをよく説明している記事を見つけました。

関数がこの大きなオブジェクトの構築をまったく回避できれば、より高速になります。関数の結果を外部で変更したり、戻る直前に変更したりすると、遅くなります (その後、コピーを行う必要があります)。常に小さな部分を追加して長い文字列を構築すると、毎回新しい大きなメモリ ブロックを割り当てる必要があるため、非常にコストがかかります。

とはいえ、あなたが説明した速度低下を理解するには、コードを確認する必要があります。時々だけ結果を返すことは非常に悪いアドバイスです。コードを使用するすべての開発者は、この動作を理解するのに苦労します。これを頻繁に使用すると、遅かれ早かれアプリケーションが不安定になります。実際、PHP はしばしばそれ自体で行うように、混合型の値を返すことは危険でさえあると思います。

于 2012-09-04T19:35:57.843 に答える