2011-05-23 10 views
21
<? switch ($var): ?> 
    <? case 1: ?> 
    It's 1! 
    <? break ?> 
<? endswitch ?> 

Quiero hacer algo como eso, en otras palabras, usar la instrucción switch en plantillas de PHP. Esto es posible con la instrucción if. El código anterior genera Parse error: syntax error, unexpected T_INLINE_HTML, expecting T_ENDSWITCH or T_CASE or T_DEFAULT en PHP 5.3. El PHP docs sugiere que esto debería ser posible.Cambiar declaración en HTML PHP inyectado

¿Alguien puede confirmar que esto no funciona o, mejor dicho, decirme qué estoy haciendo mal?

Gracias.

+1

Debe utilizar ' Spudley

+1

¿Dónde ves esto en la documentación? Fui al enlace que proporcionaste, pero no encuentro nada sobre la compatibilidad de mezclar HTML en línea con una declaración de cambio. –

+1

Respuesta

43

Leí en el documento php que su ejemplo no debería funcionar.

Cualquier salida (incluido el espacio en blanco) entre una instrucción de interruptor y el primer caso dará como resultado un error de sintaxis. Por ejemplo, esto es válido

Tal vez puedas probar:

<div> 
<?php switch($variable): 
case 1: ?> 
    <div> 
    Newspage 
    </div> 
<?php break; ?> 
<?php case 2: ?> 
    </div> 
    Forum 
    <div> 
<?php break; ?> 
<?php endswitch; ?> 
</div> 

http://php.net/control-structures.alternative-syntax

+3

Gracias! (para todos los demás, el código es de [este comentario] (http://se2.php.net/manual/es/control-structures.alternative-syntax.php#80668)) – Znarkus

14

Tienes

?>\n\n<? 

después de su interruptor que se convierte en

switch($var): 
echo "\n\t"; 
case 1: 

Piense en su script como PHP con HTML, en lugar de HTML embellecido. El binario PHP obtiene el archivo primero.

Quizás desee utilizar algo como HEREDOC para hacer eco del HTML sin guardar.

+0

Ah, eso lo explica :) ¡gracias! – Znarkus

2

propongo este formato fácil, probado y de trabajo:

<? switch($var) : case 1 : ?> 

    <div>One</div> 

<? break; case 2 : ?> 

    <div>Two</div> 

<? break; case 3 : ?> 

    <div>Three</div> 

<? break; endswitch; ?>