2011-08-14 67 views
4

可以說我有兩種情況:在php代碼中嵌入html代碼的推薦方法是什麼?

<?php 
    print("html code goes here"); 
?> 

v.s

<?php 
?> 

html codes goes here 

<?php 
?> 

將在第一種情況下的PHP解釋器的性能比第二個是壞? (由於打印功能內部的額外開銷)。

那麼,有沒有人有推薦的方式來插入PHP代碼內的HTML代碼?

回答

1

不要那樣做了!使用像Smarty這樣的模板系統,以便將邏輯與顯示代碼分開。它也允許你引入一個可以使用html的設計器,可能根本不知道php。 Smarty模板閱讀更像HTML而不是PHP,在與設計師打交道時可以發揮很大的作用。

此外,您不必擔心您的設計師在執行查找/替換時弄亂了您的代碼!

更好

但會去一個像設置或DjangoRails已明確劃定碼/模板設置,但是如果你不能做到這一點(便宜的託管解決方案),那麼至少使用模板。我不知道smarty是否是PHP的最佳選擇,但它遠比您提出的兩種解決方案都好。

5

哦,爲了所有那些稍後編輯您的代碼,請不要將任何大量的HTML代碼放入字符串中並將其回顯出來。用任何語言。

HTML屬於HTML文件,由IDE或編輯器格式化和設置,因此可以讀取。巨大的字符串塊是我見過的HTML錯誤的最大原因。

在這種情況下,性能應該不會太大,但我會假設第二個會更快,因爲它直接流式傳輸到輸出或緩衝區。

如果你希望它是更容易閱讀,使短標記,並寫這樣的:

​​

此外,啓用短標籤,很容易呼應了變量:

Hello, <?= $username ?> 

如果您正在使用它來生成某種可重用的庫,還有其他選項。

+2

Ouch短標籤。 +1,因爲這通常是一個很好的答案,但應該避免使用短標籤。在這裏閱讀答案http://stackoverflow.com/questions/2476072/tags-not-working-in-php-5-3-1 – Endophage

+2

我與那些沒有得到反標籤的東西。對我而言,唯一的兩個選擇是:缺乏可移植性(您正在編寫一個庫嗎?),並且您無法編寫XML打開標記。這些都是很糟糕的藉口,使用全尺寸標籤混淆html。但這是一個古老的論點,不一定要在這裏進行辯論。 – OverZealous

1

除非您專門打算這麼做,否則不要將HTML放入PHP代碼中。但是再次100%分離是我推薦的。 如果你把它們混淆在一起,人們將不得不努力工作來理解你的代碼。尤其是那些可能不熟悉php的設計師。

黃金法則是分離的前後端程序在最大程度上有助於各方面。保持他們所屬的地方。 CSS中的樣式,JS中的Java腳本,庫文件夾/文件中的Php,以及使用所需的類/函數。

使用短標籤<?如果需要(但我不喜歡它:P)<?=標籤爲輸出echo。除了短標籤最好是avoided

+0

如果是非常少量的html,在foreach循環中用'

  • '標籤來生成列表,那麼通過打開和關閉php標籤來啓用和禁用解釋器的成本將會(但是會輕微)影響性能。因此,我不同意應該建議100%分離。 – Endophage

    +0

    是的,我同意。但是,處理時間超過1毫秒(在測試時至少)是比得到一個瘋狂的bug值得的麻煩:P – footy

    1

    爲了獲得更好的維護和可伸縮性,您應該將PHP放在PHP代碼之外。在顯示任何數據之前進行所有必要的數據處理也是非常有益的,以便分離邏輯和表示。

    寧可試着去考慮不斷分離你的php和HTML,而應該在分離你的後端邏輯和顯示邏輯的思想中。

    MVC模式是想着你的代碼的好方法 - 爲了正確地使用PHP,你必須使用MVC (model-view-controller) pattern

    0

    [頭牆上方的頭]我們中的許多人已經從WordPress學習模板,其中沒有嵌入PHP它幾乎不可能做任何事情。我完全理解爲什麼人們會提倡嚴格的MVC或引擎,比如Smarty,但事實是在WordPress開發的情況下,您需要使用php來動態處理輸出。實際上,從這個背景出發,我總是假設php中的'hp'正是出於這個原因。所以我可以編寫'普通'的HTML,做一些服務器端處理,然後返回到HTML。

    因此,從我的角度來看,對於您的問題的答案是您的示例的第二個示例更容易閱讀 - 優雅編碼的基礎之一。但它取決於。如果有大量的處理來生成一段簡單的HTML,那麼建立一個大的變量並在最後回顯它可能會更容易。我拋棄了多行echo語句。在這種情況下,我可能會使用一個函數來保持我的HMTL清潔。 WordPress再次做了這麼多事情;例如the_title()返回一個簡單的字符串,但在返回該字符串之前做了一些處理,因此<h1><? the_title(); ?> </h1>可以很好地讀取。

    這是一個從未正式教過複雜編碼的WordPress開發人員的POV。我希望在這個答案中失去相當數量的聲望點。 [/頭在護欄上方]

    +0

    我知道這個問題已經四年了,但這是我發現的這個問題的最清晰的迭代。 –