2011-11-29 11 views
8

In PHP, sto usando un'istruzione if per identificare se un utente ha effettuato l'accesso o meno, e in base al risultato, visualizzando il menu principale (se connesso) o un messaggio "è necessario effettuare il login" in caso contrario. Sto facendo questo in questo modo:L'output di HTML con echo è considerato una cattiva pratica in 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> 

Come si può vedere, il codice per visualizzare sia il menu principale o il messaggio "login" è prodotta da un echo. È una cattiva pratica, forse c'è un modo migliore?

A proposito, ho tagliato la maggior parte dell'HTML dallo echo s nel mio frammento sopra. Il menu principale è costituito da un elenco, ma non mi sono preoccupato di includerlo perché è irrilevante per la domanda, immagino.

risposta

24

Lo considero una pratica scorretta. Non sono sicuro di ciò che pensano gli altri. Per prima cosa, sembra terribile in editor di testo con evidenziazione della sintassi, allora si deve preoccupare di stringhe sfuggiti, ecc

Questo è come lo faccio:

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

si può salire fuori dal PHP tag e usa direttamente HTML. Ci sono pro e contro a farlo in questo modo. Mi piace molto più che riecheggiare le cose. Altre opzioni sarebbero di rendere nuove viste in quelle aree sulla base dei risultati delle dichiarazioni if. Un sacco di possibilità, ma quanto sopra è solo un modo per renderlo un po 'più pulito e (penso) migliore.

+0

Dannatamente mi ha battuto! –

+0

Grazie, sembra un bel modo pulito per fare le cose. Ho altre pagine che echeggiano l'HTML e a volte diventano piuttosto confuse e le carte da leggere. – james246

+0

* difficile da leggere;) – james246

5

Perché non scrivere in questo modo?

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

Utilizzando il alternative control structures separa il vostro codice dal codice un po 'di più.

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

La bellezza di PHP è che puoi farlo.

+0

Non proprio specifico per PHP. –

6

Non c'è niente di sbagliato con echo per html, se usato con moderazione. Basta non usarlo per lunghi blocchi multi-linea. Invariabilmente finirai con qualche brutto costrutto che richiede la fuga e quant'altro, il che rende le cose ancora più brutte da leggere.

Se l'html che si sta visualizzando è "statico" (nessuna variabile da inserire), quindi prendere in considerazione l'interruzione della modalità php (?>) e scaricare semplicemente l'html così com'è. Se è necessario inserire variabili, prendere in considerazione l'utilizzo di HEREDOC, che si comporta come una stringa con doppi apici, ma senza virgolette.

0

Alcuni lo considerano una cattiva pratica, è vero per qualsiasi cosa. Mi piace non usare l'eco. Se lo fai in questo modo è più chiaro agli editori come Dreamweaver quello che vuoi e ottieni tutti i vantaggi dell'autocompletamento.

+0

+1 per aver menzionato il completamento automatico. Ho modificato un po 'il tuo post per chiarire un po' le cose. –

1

Non esiste una vera "pratica migliore", anche se alcuni sosterranno che preferiscono l'uno o l'altro. Idealmente se si separa l'HTML da PHP, si sta isolando il back-end dell'applicazione dal frontend, rendendo quindi più facile la lettura, la modifica e la manutenzione.

Per quanto riguarda il codice, potrei modificarlo in modo che sia più conciso (a seconda di cosa intendi per 'MAIN MENU roba ...'Mi piacerebbe riconsiderare questa modifica):

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

Se il progetto arriva a una dimensione ragionevole, non c'è praticamente alcun modo per aggirare una netta separazione di elementi di presentazione e logica del programma, solo per il gusto di manutenibilità e scalabilità. Quindi quello che stai facendo nel tuo codice attuale non ha molta importanza; a lungo termine, dovresti esaminare fin dall'inizio un approccio al design pulito.

Esistono molte soluzioni esistenti, che in genere prevedono una sorta di modelli di layout caricati dal codice.

Problemi correlati