Obviamente {}es mejor y : endif;es una atrocidad que no existiría si la vida fuera justa. Con un buen editor de texto, tendrá un método abreviado de teclado para combinar corchetes, para saltar de la apertura al cierre o viceversa. Tal cosa no existe ni podría existir para la horrible : endif;sintaxis.
developerwjk
3
@developerwjk ¿cómo podría eso nunca existir?
alex
Respuestas:
177
Son iguales, pero el segundo es excelente si tienes MVC en tu código y no quieres tener muchos ecos en tu código. Por ejemplo, en mis .phtmlarchivos (Zend Framework) escribiré algo como esto:
<?php if($this->value):?>
Hello<?php elseif($this->asd):?>
Your name is: <?= $this->name ?><?php else:?>
You don't have a name.<?php endif;?>
@alex También funcionará con llaves, pero al menos personalmente me parece más claro en cosas como esta. Porque saben que es el final de un if y no el final de un ciclo de algún tipo u otra cosa. Piensa que tienes endfor y endwhile o algo similar también.
Svish
10
No usaría el <? =?> Porque no es compatible con todos los servidores, especialmente los de alojamiento compartido que no le permiten cambiar php.ini.
Siqi Lin
2
El punto pertinente es <? Php endif; ?> - puede decir exactamente qué está terminando incluso con muchas líneas de HTML entre el if / else anterior y esta declaración.
Fenton
77
¿Por qué "el segundo es genial si no quieres tener muchos ecos en tu código"? Creo que es igual para la sintaxis tradicional {}también. No se necesita eco adicional <?php if(...){ ?> ... <?php }else{ ?> ... <?php } ?>. ¿Cuál es la diferencia con <?php if(...): ?> ... <?php else: ?> ... <?php endif ?>?
Sithu
9
No estoy seguro de por qué esta respuesta es la más alta, ya que no es un gran ejemplo (puede lograr exactamente lo mismo con llaves).
Reinier Kaper
69
Personalmente, realmente odio la sintaxis alternativa. Una cosa buena de los corchetes es que la mayoría de los IDE, vim, etc., todos tienen resaltado de corchetes. En mi editor de texto puedo hacer doble clic en una llave y resaltará todo el fragmento para que pueda ver dónde termina y comienza muy fácilmente.
No conozco un solo editor que pueda resaltar endif, endforeach, etc.
Se supone que esto debe usarse en plantillas PHP, donde el principio y el final del bloque están separados por fragmentos de idioma extranjero. Si su IDE entiende PHP lo suficientemente bien como para analizarlo, también debería resaltarlo endifcorrectamente como fin de bloque. Si no es así, en realidad no compra nada usando, }ya que de todos modos no coincidirá.
Pavel Minaev
2
La mayoría de las ide (al menos las que he usado) solo resaltan {}
AntonioCS
11
Netbeans 7.x destaca felizmente la coincidencia de foreforeach, endif, etc.
Jonathan Day
@Señor. Minaev: El emparejador de llaves se analizará correctamente probablemente en el 98% de los casos, incluso si hay un código extraño en su interior. Solo fallará cuando haya una llave ezotérica "abriendo pero no cerrando el código" dentro de ella. Sí, sucede, pero rara vez sucede. ¿Por qué crees que un complejo "fin-lo que sea"; ¿El enfoque analizador funcionará mejor prácticamente que la solución simple?
PatlaDJ
Creo que el punto más importante es ser descriptivo , cuando sea necesario. Por lo tanto, podemos encontrar fácilmente dónde estaba abierto, independientemente de la herramienta que necesitemos usar. Especialmente cierto para PHP, que de vez en cuando necesita ver utilizando los editores más simplistas.
cregox
49
Creo que esto lo dice todo:
Esta sintaxis alternativa es excelente para mejorar la legibilidad (¡tanto para PHP como para HTML!) en situaciones en las que tiene una combinación de ellos.
Pero si se endifestá alejando demasiado del corresponsal if, creo que es una práctica mucho mejor hacer un comentario de referencia. Solo para que pueda encontrar fácilmente dónde estaba abierto. No importa el idioma que sea:
if(my_horn_is_red or her_umbrella_is_yellow){// ...// let's pretend this is a lot of code in the middleforeach(day in week){
sing(a_different_song[day]);}// ...}//if my_horn_is_red
¡Eso realmente se aplica a cualquier "cosa de cierre" análoga! ;)
Además, en general, los editores manejan mejor los corchetes, en el sentido de que pueden indicarle dónde estaba abierto. Pero incluso eso no hace que los comentarios descriptivos sean menos válidos.
acuerda que esto es mucho mejor, en lugar de escribir endif, puede decir qué está haciendo realmente la condición if.
cartalot
¡@cartalot tal vez sería bueno tenerlo incorporado en el lenguaje (como un argumento opcional de cierre del bloque con nombre), por lo que podríamos tener errores al cerrar bloques incorrectos en lugares incorrectos! :)
Creo que realmente depende de tu estilo de codificación personal. Si está acostumbrado a C ++, Javascript, etc., puede sentirse más cómodo usando la sintaxis {}. Si está acostumbrado a Visual Basic, puede usar if: endif; sintaxis.
No estoy seguro de que uno pueda decir definitivamente que uno es más fácil de leer que el otro, es una preferencia personal. Usualmente hago algo como esto:
Es una cuestión de opinión. Puedo ver por qué algunos sentirían que la segunda forma es más fácil, pero solo si no has estado programando en Javascript y C ++ toda tu vida. :)
No, los corchetes son objetivamente más fáciles de leer (cuando no se usa la versión egipcia). Incluso si está haciendo los corchetes de manera que caminen como un egipcio, es más fácil de leer que la sintaxis VB porque los editores de texto modernos tendrán una función de coincidencia de corchetes para llevarlo de la apertura al cierre del corchete o al revés. No hay forma de que puedan tener una función de coincidencia de sintaxis VB. También tiene que considerar la anidación, y VB falla miserablemente en eso.
developerwjk
5
Usaría la primera opción si fuera posible, independientemente de la nueva opción. La sintaxis es estándar y todos lo saben. También es compatible con versiones anteriores.
Pero: si desea usar PHP como lenguaje de plantillas en sus archivos de vista (la V de MVC), puede usar esta sintaxis alternativa para distinguir entre el código php escrito para implementar la lógica de negocios (partes de Controlador y Modelo de MVC) y gui- lógica. Por supuesto, no es obligatorio y puede usar la sintaxis que desee.
No hay diferencia técnica entre las dos sintaxis. La sintaxis alternativa no es nueva; fue compatible al menos desde PHP 4, y tal vez incluso antes.
Es posible que prefiera la forma alternativa porque indica explícitamente qué estructura de control está finalizando: endwhilepor ejemplo, solo puede terminar un whilebloque, mientras que si encuentra una llave, podría estar cerrando cualquier cosa.
Sin embargo, es posible que prefiera la sintaxis tradicional si utiliza un editor que tenga soporte especial para llaves en otras sintaxis tipo C. Vim, por ejemplo, admite varias pulsaciones de teclas para navegar a llaves coincidentes y al inicio y al final de bloques delimitados por llaves. La sintaxis alternativa rompería esa característica del editor.
Un buen editor de texto tendrá un acceso directo de coincidencia de paréntesis para llevarlo a donde comenzó. Es endif;difícil encontrar el comienzo, porque no tendrán una función similar para eso, y el código de estilo VB no encaja bien.
developerwjk
3
Todo depende, personalmente prefiero la sintaxis tradicional con ecos y muchas hendiduras, ya que es mucho más fácil de leer.
<?php
if($something){
doThis();}else{
echo '<h1>Title</h1>
<p>This is a paragraph</p>
<p>and another paragraph</p>';}?>
Estoy de acuerdo en que la sintaxis alternativa es más limpia con las diferentes cláusulas finales, pero realmente me resulta difícil tratarlas sin la ayuda del resaltado del editor de texto, y no estoy acostumbrado a ver código "condensado" como este:
si hubiera leído todo el hilo: se prefiere la sintaxis alternativa y mucho <em> limpiador </em> al crear plantillas o usar un idioma extranjero en las vistas de php
Juraj Blahunka
1
Solía usar llaves para las condiciones "if, else". Sin embargo, encontré "if (xxx): endif;" es más semántico si el código está muy envuelto y es más fácil de leer en cualquier editor.
Por supuesto, muchos editores son capaces de reconocer y resaltar fragmentos de código cuando se seleccionan las llaves. Algunos también funcionan bien en el par "if (xxx): endif" (por ejemplo, NetBeans)
Personalmente, recomendaría "if (xxx): endif", pero para una comprobación de condición pequeña (por ejemplo, solo una línea de código), no hay muchas diferencias.
Siento que ninguna de las respuestas preexistentes identifica completamente la respuesta aquí, así que voy a articular mi propia perspectiva. Funcionalmente, los dos métodos son iguales. Si el programador está familiarizado con otros lenguajes que siguen la sintaxis C, entonces probablemente se sentirán más cómodos con los frenos, o si php es el primer idioma que están aprendiendo, se sentirán más cómodos con la ifendifsintaxis, ya que parece más cercana al lenguaje normal.
Si eres un programador realmente serio y necesitas hacer las cosas rápido, entonces creo que la sintaxis de las llaves es superior porque ahorra tiempo escribiendo
if(/*condition*/){/*body*/}
comparado con
if(/*condition*/):/*body*/
endif;
Esto es especialmente cierto con otros bucles, por ejemplo, foreachdonde terminaría escribiendo 10 caracteres adicionales. Con llaves, solo necesita escribir dos caracteres, pero para la sintaxis basada en palabras clave, debe escribir una palabra clave adicional para cada ciclo y declaración condicional.
} } } }
(que también se pueden hacerendif
) y desea saber dónde estaban abiertos? La respuesta es ninguno . Básicamente es la primera "regla" de los principios de diseño de Python .{}
es mejor y: endif;
es una atrocidad que no existiría si la vida fuera justa. Con un buen editor de texto, tendrá un método abreviado de teclado para combinar corchetes, para saltar de la apertura al cierre o viceversa. Tal cosa no existe ni podría existir para la horrible: endif;
sintaxis.Respuestas:
Son iguales, pero el segundo es excelente si tienes MVC en tu código y no quieres tener muchos ecos en tu código. Por ejemplo, en mis
.phtml
archivos (Zend Framework) escribiré algo como esto:fuente
{}
también. No se necesita eco adicional<?php if(...){ ?> ... <?php }else{ ?> ... <?php } ?>
. ¿Cuál es la diferencia con<?php if(...): ?> ... <?php else: ?> ... <?php endif ?>
?Personalmente, realmente odio la sintaxis alternativa. Una cosa buena de los corchetes es que la mayoría de los IDE, vim, etc., todos tienen resaltado de corchetes. En mi editor de texto puedo hacer doble clic en una llave y resaltará todo el fragmento para que pueda ver dónde termina y comienza muy fácilmente.
No conozco un solo editor que pueda resaltar endif, endforeach, etc.
fuente
endif
correctamente como fin de bloque. Si no es así, en realidad no compra nada usando,}
ya que de todos modos no coincidirá.Creo que esto lo dice todo:
http://ca3.php.net/manual/en/control-structures.alternative-syntax.php
Al mezclar HTML y PHP, la sintaxis alternativa es mucho más fácil de leer. En documentos PHP normales se debe usar la sintaxis tradicional.
fuente
En nuestra empresa, la forma preferida de manejar HTML es:
Al final, realmente se trata de elegir uno y apegarse a él.
fuente
<?php if(TRUE){?> test <?php }?> <?php else{ ?> test2 <?php }?>
De hecho, ambos son iguales, funcionalmente.
Pero si se
endif
está alejando demasiado del corresponsalif
, creo que es una práctica mucho mejor hacer un comentario de referencia. Solo para que pueda encontrar fácilmente dónde estaba abierto. No importa el idioma que sea:¡Eso realmente se aplica a cualquier "cosa de cierre" análoga! ;)
Además, en general, los editores manejan mejor los corchetes, en el sentido de que pueden indicarle dónde estaba abierto. Pero incluso eso no hace que los comentarios descriptivos sean menos válidos.
fuente
Aquí puede encontrarlo en la documentación oficial: PHP: sintaxis alternativa para estructuras de control
fuente
Creo que es particularmente más claro cuando usas una combinación de
if
s,for
syforeach
es en los guiones de vista:Opuesto a:
Esto es especialmente útil para declaraciones de control largas donde es posible que no pueda ver la declaración superior desde la llave inferior.
fuente
Creo que realmente depende de tu estilo de codificación personal. Si está acostumbrado a C ++, Javascript, etc., puede sentirse más cómodo usando la sintaxis {}. Si está acostumbrado a Visual Basic, puede usar if: endif; sintaxis.
No estoy seguro de que uno pueda decir definitivamente que uno es más fácil de leer que el otro, es una preferencia personal. Usualmente hago algo como esto:
Si eso es más fácil de leer que:
Es una cuestión de opinión. Puedo ver por qué algunos sentirían que la segunda forma es más fácil, pero solo si no has estado programando en Javascript y C ++ toda tu vida. :)
fuente
Usaría la primera opción si fuera posible, independientemente de la nueva opción. La sintaxis es estándar y todos lo saben. También es compatible con versiones anteriores.
fuente
Los dos son iguales.
Pero: si desea usar PHP como lenguaje de plantillas en sus archivos de vista (la V de MVC), puede usar esta sintaxis alternativa para distinguir entre el código php escrito para implementar la lógica de negocios (partes de Controlador y Modelo de MVC) y gui- lógica. Por supuesto, no es obligatorio y puede usar la sintaxis que desee.
ZF usa ese enfoque.
fuente
No hay diferencia técnica entre las dos sintaxis. La sintaxis alternativa no es nueva; fue compatible al menos desde PHP 4, y tal vez incluso antes.
Es posible que prefiera la forma alternativa porque indica explícitamente qué estructura de control está finalizando:
endwhile
por ejemplo, solo puede terminar unwhile
bloque, mientras que si encuentra una llave, podría estar cerrando cualquier cosa.Sin embargo, es posible que prefiera la sintaxis tradicional si utiliza un editor que tenga soporte especial para llaves en otras sintaxis tipo C. Vim, por ejemplo, admite varias pulsaciones de teclas para navegar a llaves coincidentes y al inicio y al final de bloques delimitados por llaves. La sintaxis alternativa rompería esa característica del editor.
fuente
Al final, simplemente no desea buscar la siguiente línea y luego tener que adivinar dónde comenzó:
Técnica y funcionalmente son lo mismo.
fuente
endif;
difícil encontrar el comienzo, porque no tendrán una función similar para eso, y el código de estilo VB no encaja bien.Todo depende, personalmente prefiero la sintaxis tradicional con ecos y muchas hendiduras, ya que es mucho más fácil de leer.
Estoy de acuerdo en que la sintaxis alternativa es más limpia con las diferentes cláusulas finales, pero realmente me resulta difícil tratarlas sin la ayuda del resaltado del editor de texto, y no estoy acostumbrado a ver código "condensado" como este:
fuente
Solía usar llaves, pero ahora prefiero usar esta sintaxis alternativa abreviada debido a la legibilidad y accesibilidad del código.
fuente
Personalmente prefiero hacerlo en dos secciones separadas pero dentro del mismo PHP como:
Pero tal vez es más lento?
fuente
Creo que es una cuestión de preferencia. Yo personalmente uso:
fuente
Solía usar llaves para las condiciones "if, else". Sin embargo, encontré "if (xxx): endif;" es más semántico si el código está muy envuelto y es más fácil de leer en cualquier editor.
Por supuesto, muchos editores son capaces de reconocer y resaltar fragmentos de código cuando se seleccionan las llaves. Algunos también funcionan bien en el par "if (xxx): endif" (por ejemplo, NetBeans)
Personalmente, recomendaría "if (xxx): endif", pero para una comprobación de condición pequeña (por ejemplo, solo una línea de código), no hay muchas diferencias.
fuente
Siento que ninguna de las respuestas preexistentes identifica completamente la respuesta aquí, así que voy a articular mi propia perspectiva. Funcionalmente, los dos métodos son iguales. Si el programador está familiarizado con otros lenguajes que siguen la sintaxis C, entonces probablemente se sentirán más cómodos con los frenos, o si php es el primer idioma que están aprendiendo, se sentirán más cómodos con la
if
endif
sintaxis, ya que parece más cercana al lenguaje normal.Si eres un programador realmente serio y necesitas hacer las cosas rápido, entonces creo que la sintaxis de las llaves es superior porque ahorra tiempo escribiendo
comparado con
Esto es especialmente cierto con otros bucles, por ejemplo,
foreach
donde terminaría escribiendo 10 caracteres adicionales. Con llaves, solo necesita escribir dos caracteres, pero para la sintaxis basada en palabras clave, debe escribir una palabra clave adicional para cada ciclo y declaración condicional.fuente