2011-11-29 70 views
8

在PHP中,我使用if語句來確定用戶是否已登錄,並根據結果顯示主菜單(如果已登錄)或者「需要登錄」消息,如果沒有。我喜歡這樣的:使用echo輸出HTML被認爲是PHP中不好的做法?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 
    <link rel="stylesheet" href="style.css" type="text/css" /> 
    <title>Home</title> 
</head> 
<body> 
    <div id="header"> 
     <a href="index.php"><img src="wtcdblogo.png" alt="WTC DB logo" /></a> 
    </div> 
    <?php 
     if($_SESSION['loggedIn'] == 1) { 
      echo "<div id='main'>MAIN MENU stuff goes here</div>"; 
     } else { 
      echo "<div id='main'>Please login...</div>"; 
     } 
    ?> 
</body> 
</html> 

正如你看到的,代碼顯示通過主菜單或「請登錄」消息由echo生產。這是不好的做法,也許有更好的辦法?

順便說一句,我已經在上面的代碼片斷中刪除了大部分來自echo的HTML。主菜單是由一個列表組成的,但我沒有理會,因爲它與這個問題無關,我想。

回答

24

我認爲這是不好的做法。不確定其他人的想法。一方面,它看起來與語法高亮文本編輯器可怕的,那麼你不用擔心逃串等

這是我要做的事:

<div> 
     <? if ($_SESSION['loggedIn'] === 1): ?> 
     <div id="main">Main Menu stuff goes here</div> 
     <? else: ?> 
     <div id="main">Please log in...</div> 
     <? endif ?> 
    </div> 

你可以跳上了PHP的出標記並直接使用HTML。這樣做有利有弊。我喜歡這種方式比迴應東西更好。其他選擇是根據if語句的結果對這些領域提出新的觀點。很多的可能性,但上述只是一個方法,使一點更清潔,(我認爲)更好。

+0

該死的打敗我吧! –

+0

謝謝,這看起來像一個乾淨的方式來做事情。我有其他頁面回顯HTML,它變得非常混亂,有時會讀卡。 – james246

+0

*難以閱讀;) – james246

5

爲什麼不把它寫成這樣?

<?php if($_SESSION['loggedIn'] == 1): ?> 
    <div id='main'>MAIN MENU stuff goes here</div> 
<?php else: ?> 
    <div id='main'>Please login...</div> 
<?php endif; ?> 

使用alternative control structures從代碼中分離出更多標記。

3
<?php if (condition) { ?> 
    <div> 
     some stuff 
    </div> 
<?php } ?> 

PHP的美妙之處在於你可以做到這一點。

+0

不是特定的PHP .. –

6

在適度使用html時,echo沒有任何問題。只是不要將它用於較長的多行塊。你總是會得到一些醜陋的結構,需要逃避和什麼,這使得事情更加醜陋。

如果你輸出的html是「靜態的」(沒有要插入的變量),那麼考慮打破php模式(?>)並簡單地按原樣轉儲html。如果確實需要插入變量,那麼可以考慮使用HEREDOC,它的作用類似於雙引號字符串,但沒有引號。

0

有人認爲這是不好的做法,對任何事情都是如此。我喜歡不使用回聲。如果你這樣做,那麼Dreamweaver等編輯人員就能更清楚地知道你想要什麼,並獲得所有自動完成的好處。

<?php 
if ($loggedin) 
{ 
?> 
Thank you for being logged in. <hr> 
<?php 
} 
else 
{ 
?> 
Please <a href='login.php'>login</a> 
<?php 
} 
?> 
+0

+1提及自動完成。我稍微修改了你的帖子來澄清一些事情。 –

1

沒有真正的'最佳實踐',儘管有些人會爭辯說他們更喜歡這兩種。理想情況下,如果您將HTML與PHP分開,則應用程序的後端與前端隔離,因此可以更輕鬆地進行讀取,修改和維護。

至於你的代碼,我可能會修改它,所以它更簡潔(取決於你的意思是'主菜單的東西......「我會考慮這個編輯):

<div id="main"> 
    <?= ($_SESSION['loggedIn'] == 1) ? 'MAIN MENU stuff goes here' : 'Please login...'; ?> 
</div> 
2

如果您的項目獲取到一個合理的規模,有基本圍繞表象元素和程序邏輯的完全分離沒有辦法,只是爲了可維護性和可擴展性的緣故。所以你在當前代碼中做什麼並不重要;從長遠來看,你應該從一開始就考慮一種乾淨的設計方法。

有許多現有的解決方案,通常涉及某些由代碼加載的佈局模板。

相關問題