2011-05-13 111 views
1

我聽說通過PHP回顯動態HTML內容是一種不好的做法。但是,如果你需要它,還有什麼替代方案,比如f.e.一個網站上的導航菜單,每個頁面都重複一次?通過PHP動態顯示HTML內容

+0

你在哪裏聽說這是不好的做法? – 2011-05-13 10:18:40

回答

4

我懷疑這是爲了反對在您的PHP腳本中「硬編碼」視圖的建議,而是通過引入類似於MVC方法的方式分離您的擔憂。代碼的可維護性和清晰度方面的收益是顯着的,在這方面這是一個很好的建議。

雖然這只是一個抽象。在某些時候,PHP必須將HTML輸出到瀏覽器。因此,輸出動態HTML內容是PHP不可或缺的組成部分,但有更好更好的方法,並且在echo語句中對HTML字符串進行硬編碼通常不是實現它的最佳方式。引入模板引擎和單獨的視圖和業務邏輯,你可能會變得更好。

6

這就是PHP存在的原因。

您聽錯了。

+0

好吧,我的意思是像功能菜單(){echo'這裏的一些HTML'的結構; } 你說這樣的事情很好? =) – Arnthor 2011-05-13 10:21:57

+0

@Nordvind:從PHP輸出HTML都有優先和不鼓勵的方法。但是,除此之外,事實是,PHP旨在以這種或那種方式來執行此操作。 – 2011-05-13 13:33:19

+0

@Nordvind:如果您真的打算詢問具體的輸出機制_和方法,請編輯您的問題以更具體。 – 2011-05-13 14:51:46

0

它始終是更好地分割演示和腳本,例如,而不是使用代碼這樣的事情

echo "<title>$title</title>"; 

你可以使用

<title><?php echo $title; ?></title> 

考慮從PHP分裂的html代碼,只保留PHP用於返回一些結果而不是實際的html。這樣它會更易讀IMO。不管你採用哪種方式都不重要,因爲PHP是爲了返回文本而這就是你正在做的事情。

3

這不是不好的做法呼應HTML中的內容,這是不好的做法來執行任務,如HTML中的數據的編輯,例如:

<?php 

$query = mysql_query("SELECT * FROM table"); 
echo "<tably>" 
while($row = mysql_fetch_assoc($query)) 
{ 
    ?><tr><td><?php echo $row['item']; ?></td></tr> 
} 
?> 

那醜陋和壞的做法,你會是什麼做的是這樣的:

<?php 

$data = array(); 
try 
{ 
    $query = mysql_query("SELECT * FROM table"); 
    while($row = mysql_fetch_assoc($query)) 
    { 
     $data[] = $row; 
    } 
}catch(Exception $e) 
{ 
    die("Database Error: " . $e->getMessage()); 
} 

/* 
    * Some more queries and logical data stuff. 
    * Set headers as well 
*/ 

require("main_template.php"); 

,然後在主模板中:

<table> 
    <?php foreach($data as $row): ?> 
    <tr> 
     <td><?php echo $row['item']; ?></td> 
    </tr> 
    <?php endforeach;?> 
</table> 

我們喜歡在開始時獲取頁面所需數據的原因是因爲如果觸發了任何錯誤,我們可以顯示一個不錯的頁面,而不是將錯誤扔到內容的一半以內,等等。

0

如果你有像菜單一樣的通用代碼,你可以把菜單的代碼放在一個獨立的menu.php文件中,並使用PHP include語句使用菜單代碼。這裏指的 Php common menu code

肯定你所聽到的是不是正確的關於PHP參考這篇文章有什麼....