PHPでのECHO構文の連結

I have made a small function (WordPress), using echo .

/* .. Some code */
switch ($linktype) {
    case "next":
        echo '
' . previous_post_link('%link',''.$prevthumbnail.'') . '
' . next_post_link('%link',''.$nextthumbnail.'') . '

私が知っている "通常の"連結構文を使用する...

echo '
'. previous_post_link('%link',''.$prevthumbnail.'') . '

...生成する...




< result of previous_post_link() >

I obviously need

< result of previous_post_link()
>

. I have found some post suggesting to replace the dots
('.') with commas (','), so now I
have...

echo '
' , previous_post_link('%link',''.$prevthumbnail.'') , '

...働く...これは問題に対処する "正しい"方法ですか、これはちょうど
"ハック"で動作するのですか?より良いアプローチがありますか?

ベストアンサー

カンマは高速です。

echo 構文は複数の "パラメータ"を許可します。コンマで echo
すると、出力はバッファごとに1つずつ送信されます。
を使用する場合は、最初に連結する必要があります。

これは、ほとんどのアプリケーションではスピードが大幅に低下することはありませんが、私は通常、 echo
にコンマを使用することを習慣にしています。

Here's a benchmark, if you're curious: http://www.electrictoolbox.com/php-echo-commas-vs-concatenation/


EDIT: Now, here's why things are "out of
order". (Apologies to all, as I just now figured out that this was
the root question the whole time.) When you echo with
., you concatenate first before echo gets
to do its job. To do that, each expression needs evaluated first.
Consider this:

echo (5+5) . (10+10);

PHPは最初に(5 + 5)を評価してから(10 +
10)
を評価します。これは以下のようになります。

echo 10 . 20;

そして、これらは連結されている必要があるので、文字列に変換され、これになります:

echo "1020";

それは理にかなっていますか?次に、関数
previous_post_link()について考えてみましょう。
@Timはこの関数からの戻り値がないことは間違いありません。その関数が評価されると、何も返されず、何かをエコーし​​ます。だから私たちがこれを行うならば:

echo "test" . previous_post_link();

まず、両方のことが評価されます。 "test"
はすでに文字列ですが、連結の戻り値を取得するにはまず関数
previous_post_link()を実行する必要があります。実行されたとき、
previous_post_link()は何かを出力し、何も返しません。
"test" は何も連結されず、その連結は echo
を介して出力されます。

さて、カンマを代わりに使用するとします。

echo "test", previous_post_link();

PHPは echo 構文のすべての "parameters"を順番に評価し、出力します。まず、
"test" が出力され、次に
previous_post_link()が評価され、独自の出力を持ち、何も返さないので、何も出力されません。

私はこれがより明確であることを望む。投稿しない場合。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です