簡體   English   中英

在PHP中串聯ECHO語法

[英]Concatenating ECHO syntax in PHP

我使用echo .創建了一個小功能( WordPressecho .

/* .. Some code */
switch ($linktype) {
    case "next":
        echo '<p class="next">' . previous_post_link('%link',''.$prevthumbnail.'') . '</p>';
        break;
    case "prev":
        echo '<p class="prev">' . next_post_link('%link',''.$nextthumbnail.'') . '</p>';
        break;
}
/* .. Some other code*/

使用我知道的“常規”串聯語法...

echo '<p class="next">'. previous_post_link('%link',''.$prevthumbnail.'') . '</p>';

...產生...

<p class="next"></p>< result of previous_post_link() >

我顯然需要<p class="next">< result of previous_post_link() ></p> 我發現了一些建議用逗號(',')替換圓點('。')的帖子,所以現在我有了...

echo '<p class="next">' , previous_post_link('%link',''.$prevthumbnail.'') , '</p>';

...有效 這是解決問題的“正確”方法,還是僅是可行的“ hack”? 有沒有更好的方法?

逗號更快。

echo構造允許多個“參數”。 當您用逗號echo時,輸出將直接發送到緩沖區。 使用時. ,它必須先連接。

對於大多數應用程序來說,這不會對速度造成很大的影響,但是我通常還是習慣使用逗號來進行echo

如果您好奇的話,這是一個基准: http : //www.electrictoolbox.com/php-echo-commas-vs-concatenation/


編輯:現在,這就是為什么事情“亂序”的原因。 (向大家致歉,因為我剛才想通了,這是根本問題的全部時間。)當你echo. ,您需要先進行連接,然后再執行echo操作。 為此,需要首先評估每個表達式。 考慮一下:

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

PHP將首先評估(5+5) ,然后評估(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構造的所有“參數”,並輸出它們。 首先,輸出"test" ,然后求值previous_post_link() ,它具有自己的輸出,不返回任何內容,因此沒有任何輸出。

我希望這更清楚。 如果沒有發布。

問題是WordPress的 previous_post_link('%link',''.$prevthumbnail.'')函數實際上內置了自己的打印命令,並且在echo完成打印后才進行打印。

如果要在回顯中使用此命令(或保存為字符串),則必須使用get_previous_posts_link ,而不是打印該值會返回它。

作為我將來的備忘錄:

$squarer = function ($x) { $out = $x*$x; echo "done!\n"; return $out; };

echo 'The square of 2 is ' . $squarer(2) . "!\n";
echo 'The square of 2 is ', $squarer(2), "!\n";

// **** OUTPUT ****
// done!
// The square of 2 is 4!
// The square of 2 is done!
// 4!

使用點時,以某種方式(表達式,函數)需要評估的所有內容都將不可避免地“推”到末尾?

我無法重現此行為。 而且,據我所知,應該是相反的:回顯(未評估)的值先出現,然后才產生回顯的結果。

看來您正在混合兩件事-評估和回應。
串聯后,所有表達式依次求值:

function aplus($b){
  global $a;
  $a += $b;
}

$a=1;

echo $a."|".aplus(1).$a."||".aplus(1).$a;

如果您不善於將echo與具有自己輸出的語句混合使用,則此單獨的echo會優先執行:

function e($s){
  echo $s;
}

$a=1;

echo $a."|".e($a +1)."||".e($a+2);

好吧,一個異位來對抗布拉德的異位。

他說逗號更快。
這是不正確的,而且如果說一輛新車的價格便宜了2美分,那么說一輛新車比另一輛便宜就不正確了。 有數千種差異-服務,禮物,到商店的距離等等-使得2美分的差異完全可以忽略不計。 一個理智的買家不會以任何方式考慮2美分的差異。
同樣在這里。

這個答案只是騙人的,使您以錯誤的方式思考。 WordPress是世界上最慢的應用程序之一。 而且,如果真的想加快速度,他們就必須進行大量的性能分析和速度優化工作。 逗號到點的變化不會是這個數字。
這就是重點:人們知道逗號更快,並認為“我正在編寫快速代碼!!!” 雖然完全錯誤。 首先,代碼本身總是很快的。 我的數據操作不會使您的代碼變慢! 假設,Wordpresss每次都在解析並向內存加載數兆字節的本地化數據! 將此數據放入某個緩存中將使您的wordpress快2倍! 那就是我的“習慣”
即使您將代碼中的所有點都更改為逗號,也永遠無法衡量任何差異。 真正的差異,而不是人為的差異。 這尤其適用於echo因為沒有理智的應用程序會使用回聲數百萬次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM