2011-11-29 14 views
8

En PHP, estoy usando una declaración if para identificar si un usuario está conectado o no y, dependiendo del resultado, mostrar el menú principal (si está conectado) o el mensaje "necesita iniciar sesión" si no es así. Estoy haciendo esto, así:¿Salida de HTML con eco considerado mala práctica en 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> 

Como se puede ver, el código para mostrar ya sea el menú principal o el mensaje "Entra en la cuenta" es producido por un echo. ¿Es esta una mala práctica, tal vez hay una mejor manera?

Por cierto, he recortado la mayor parte del HTML de echo s en el fragmento anterior. El menú principal está compuesto por una lista, pero no me molesté en incluir eso, ya que es irrelevante para la pregunta, supongo.

Respuesta

24

Considero que es una mala práctica. No estoy seguro de lo que piensen los demás. Por un lado, se ve terrible en los editores de texto con resaltado de sintaxis, entonces usted tiene que preocuparse acerca de las cadenas escapado, etc.

Así es como lo hago:

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

Usted puede saltar fuera del PHP etiquetas y usa HTML directo. Hay pros y contras para hacerlo de esta manera. Me gusta mucho más que hacer eco de cosas. Otras opciones serían presentar nuevas vistas en esas áreas en función de los resultados de las declaraciones if. Muchas posibilidades, pero lo anterior es solo una forma de hacerlo un poco más limpio y (creo) mejor.

+0

¡Maldita sea, golpéame! –

+0

Gracias, parece una buena manera de hacer las cosas. Tengo otras páginas que hacen eco de HTML y se pone bastante desordenado y la tarjeta para leer a veces. – james246

+0

* difícil de leer;) – james246

5

¿Por qué no escribir de esta manera?

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

Utilizando el alternative control structures separa su margen de beneficio de su código un poco más.

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

La belleza de PHP es que puedes hacer esto.

+0

No es realmente específico de PHP .. –

6

No hay nada de malo en echo para html, cuando se usa con moderación. Simplemente no lo use para bloques largos de varias líneas. Invariablemente terminarás con una construcción fea que requiere escaparse y demás, lo que hace que las cosas sean aún más feas de leer.

Si el html que estés salida es "estáticos" (sin variables para insertar), y luego considerar la ruptura fuera del código PHP (?>) y simplemente volcar el html como es. Si necesita insertar variables, entonces considere usar un HEREDOC, que actúa como una cadena de comillas dobles, pero sin las comillas.

0

Algunos consideran que es una mala práctica, eso es cierto para cualquier cosa. Me gusta no usar el eco Si lo hace de esta manera, es más claro para los editores como Dreamweaver lo que quiere y obtendrá todos los beneficios de autocompletar.

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

+1 por mencionar autocompletar. Modifiqué tu publicación un poco para aclarar un poco las cosas. –

1

no hay una verdadera 'mejores prácticas', aunque algunos sostienen que prefieren uno u otro. Idealmente, si separa HTML de PHP, está aislando el backend de su aplicación del frontend, por lo tanto, es más fácil de leer, modificar y mantener.

En cuanto a su código, podría modificarlo por lo que es más conciso (dependiendo de lo que quiere decir con 'cosas de menú principal ...-Me reconsiderar esta edición):

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

Si el proyecto llega a un tamaño razonable, no hay esencialmente ninguna manera alrededor de una separación limpia de elementos de presentación y la lógica del programa, por el simple hecho de mantenibilidad y escalabilidad. Entonces, lo que estás haciendo en tu código actual realmente no importa; a largo plazo, debe considerar un enfoque de diseño limpio desde el principio.

Existen muchas soluciones existentes, que generalmente implican algún tipo de plantilla de diseño que el código carga.

Cuestiones relacionadas