Obviamente {}é melhor e : endif;é uma atrocidade que não existiria se a vida fosse justa. Com um bom editor de texto, você terá um atalho de teclado para colchetes correspondentes, para pular da abertura para o fechamento ou vice-versa. Nada disso jamais poderia existir para a : endif;sintaxe hedionda .
Developerwjk
3
@developerwjk como isso nunca poderia existir?
5284 alex
Respostas:
176
Eles são os mesmos, mas o segundo é ótimo se você tiver MVC no seu código e não quiser ter muitos ecos no seu código. Por exemplo, nos meus .phtmlarquivos (Zend Framework) vou escrever algo como isto:
<?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 Também funcionará com colchetes, mas pelo menos pessoalmente, acho isso mais claro em coisas como essa. Porque eles sabem que é o fim de um if e não o fim de um loop de algum tipo ou de outra coisa. Pense que você tem um fim ou fim ou algo semelhante também.
Svish
10
Eu não usaria o <? =?> Porque ele não é suportado em todos os servidores, especialmente nos servidores de hospedagem compartilhada que não permitem alterar o php.ini.
Siqi Lin
2
O ponto pertinente é <? Php endif; ?> - você pode dizer exatamente o que está terminando, mesmo com muitas linhas de HTML entre o if / else anterior e esta declaração.
Fenton
7
por que "o segundo é ótimo se você não deseja ter muitos ecos no seu código"? Eu acho que é o mesmo para a sintaxe tradicional {}também. Nenhum eco extra é necessário <?php if(...){ ?> ... <?php }else{ ?> ... <?php } ?>. Qual é a diferença <?php if(...): ?> ... <?php else: ?> ... <?php endif ?>?
Sithu
9
Não sei por que essa resposta é a mais alta, pois não é um ótimo exemplo (você pode obter exatamente o mesmo com chaves).
Reinier Kaper
69
Eu pessoalmente odeio a sintaxe alternativa. Uma coisa boa sobre os aparelhos é que a maioria dos IDEs, vim, etc, todos têm destaque de suporte. No meu editor de texto, posso clicar duas vezes em uma chave e ela destacará todo o bloco, para que eu possa ver onde termina e começa com muita facilidade.
Não conheço um único editor que possa destacar endif, endforeach etc.
Isso deve ser usado em modelos PHP, onde o início e o fim do bloco são separados por partes da linguagem estrangeira. Se o seu IDE entende o PHP bem o suficiente para analisar isso, ele também deve ser destacado endifcomo final de bloco corretamente. Caso contrário, você realmente não compra nada usando, }pois não será compatível de qualquer maneira.
Pavel Minaev 16/07/2009
2
A maioria dos ide's (pelo menos os que eu usei) destacam apenas {}
@Sr. Minaev: O par de chaves irá analisar corretamente provavelmente em 98% dos casos, mesmo que exista um código estrangeiro. Ele falhará apenas quando houver uma chave ezotérica "abrindo, mas não fechando código" dentro dela. Sim, acontece, mas raramente acontece. Por que você acha que um complexo "fim-qualquer;" abordagem analisador fará melhor na prática, do que a solução simples?
PatlaDJ
Eu acho que o ponto mais importante é ser descritivo , quando necessário. Assim, podemos encontrar facilmente onde estava aberto, independentemente de qual ferramenta precisarmos usar. Especialmente verdadeiro para PHP, que de tempos em tempos você precisa ver usando os editores mais simplistas.
cregox
49
Eu acho que isso diz tudo:
essa sintaxe alternativa é excelente para melhorar a legibilidade (para PHP e HTML!) em situações em que você tem uma mistura delas.
Mas se o assunto endifestiver muito longe do correspondente if, acho que é uma prática muito melhor fazer um comentário de referência. Só assim você pode encontrar facilmente onde foi aberto. Independentemente do idioma, é:
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
Isso realmente se aplica a qualquer "coisa de fechamento" análoga! ;)
Além disso, em geral, os editores lidam melhor com colchetes, no sentido em que podem apontar para onde ele estava aberto. Mas mesmo isso não torna os comentários descritivos menos válidos.
concorda que isso é muito melhor - em vez de digitar endif - você pode dizer o que a condição if está realmente fazendo.
cartalot
@ cartalot talvez fosse até bom ter construído na linguagem (como um argumento opcional de fechamento de bloco nomeado), para que pudéssemos ter erros ao fechar blocos errados em lugares errados! :)
Eu acho que realmente depende do seu estilo de codificação pessoal. Se você está acostumado a C ++, Javascript etc., pode se sentir mais confortável usando a sintaxe {}. Se você está acostumado ao Visual Basic, convém usar o if: endif; sintaxe.
Não tenho certeza se alguém pode dizer definitivamente que um é mais fácil de ler do que o outro - é a preferência pessoal. Eu costumo fazer algo assim:
é uma questão de opinião. Eu posso ver por que alguns acham que a segunda maneira é mais fácil - mas apenas se você não estiver programando em Javascript e C ++ a vida toda. :)
Não, os colchetes são objetivamente mais fáceis de ler (quando não se usa a versão egípcia). Mesmo se você estiver usando os colchetes de forma que eles andem como um egípcio, é mais fácil ler do que a sintaxe VB, porque os editores de texto modernos terão uma função de correspondência de colchetes para levá-lo da abertura para o colchete de fechamento ou o contrário. Não há como eles terem uma função de correspondência de sintaxe VB. Além disso, você precisa aninhar e o VB falha miseravelmente nisso.
Developerwjk
5
Eu usaria a primeira opção, se possível, independentemente da nova opção. A sintaxe é padrão e todo mundo sabe disso. Também é compatível com versões anteriores.
Mas: se você deseja usar o PHP como sua linguagem de modelagem nos arquivos de exibição (o V do MVC), pode usar esta sintaxe alternativa para distinguir entre o código php escrito para implementar a lógica de negócios (partes de MVC) e orientação. lógica. Claro que não é obrigatório e você pode usar a sintaxe que desejar.
Não há diferença técnica entre as duas sintaxes. A sintaxe alternativa não é nova; foi suportado pelo menos desde o PHP 4, e talvez até mais cedo.
Você pode preferir o formulário alternativo, porque afirma explicitamente qual estrutura de controle está terminando: endwhilepor exemplo, pode terminar apenas um whilebloco, enquanto que, se você encontrar um colchete, ele poderá fechar qualquer coisa.
Você pode preferir a sintaxe tradicional, se usar um editor que tenha suporte especial para chaves em outras sintaxes do tipo C. O Vim, por exemplo, suporta várias pressionamentos de teclas para navegar para chaves correspondentes e para o início e o fim de blocos delimitados por chave. A sintaxe alternativa quebraria esse recurso do editor.
Um bom editor de texto terá um atalho de correspondência entre parênteses para levá-lo para onde começou. Sua endif;que vai ser difícil encontrar o começo para, porque eles não têm uma função semelhante para isso, e código VB-estilo não ninho bem.
Developerwjk
3
Tudo depende. Pessoalmente, prefiro a sintaxe tradicional com ecos e muitos recuos, pois é muito mais fácil de ler.
<?php
if($something){
doThis();}else{
echo '<h1>Title</h1>
<p>This is a paragraph</p>
<p>and another paragraph</p>';}?>
Concordo que a sintaxe alt é mais limpa com as diferentes cláusulas finais, mas eu realmente tenho dificuldade em lidar com elas sem a ajuda do destaque do editor de texto, e não estou acostumado a ver código "condensado" como este:
se você leu o tópico inteiro: sintaxe alternativa é preferida e muito <em> mais limpa </em> ao modelar ou usar o idioma estrangeiro nos
modos de exibição
1
Eu costumava usar colchetes para condições "if, else". No entanto, eu encontrei "if (xxx): endif;" é mais semântico se o código estiver muito encapsulado e mais fácil de ler em qualquer editor.
Naturalmente, muitos editores são capazes de reconhecer e destacar trechos de código quando colchetes são selecionados. Alguns também se saem bem no par "if (xxx): endif" (por exemplo, NetBeans)
Pessoalmente, eu recomendaria "if (xxx): endif", mas para verificação de condição pequena (por exemplo, apenas uma linha de código), não há muitas diferenças.
Sinto que nenhuma das respostas preexistentes identifica completamente a resposta aqui, então vou articular minha própria perspectiva. Funcionalmente, os dois métodos são os mesmos. Se o programador estiver familiarizado com outros idiomas seguindo a sintaxe C, provavelmente se sentirá mais confortável com o aparelho, ou se o php for o primeiro idioma que estiver aprendendo, ele se sentirá mais confortável com a ifendifsintaxe, pois parece mais próximo para linguagem regular.
Se você é um programador realmente sério e precisa fazer as coisas com rapidez, acredito que a sintaxe entre chaves é superior porque economiza tempo ao digitar
if(/*condition*/){/*body*/}
comparado com
if(/*condition*/):/*body*/
endif;
Isto é especialmente verdade com outros loops, digamos, foreachonde você acabaria digitando 10 caracteres extras. Com chaves, você só precisa digitar dois caracteres, mas para a sintaxe baseada em palavras-chave, você precisa digitar uma palavra-chave extra inteira para cada loop e declaração condicional.
} } } }
(o que também pode ser feitoendif
) e você deseja saber onde eles foram abertos? A resposta é nenhuma . É basicamente a primeira "regra" dos princípios de design de python .{}
é melhor e: endif;
é uma atrocidade que não existiria se a vida fosse justa. Com um bom editor de texto, você terá um atalho de teclado para colchetes correspondentes, para pular da abertura para o fechamento ou vice-versa. Nada disso jamais poderia existir para a: endif;
sintaxe hedionda .Respostas:
Eles são os mesmos, mas o segundo é ótimo se você tiver MVC no seu código e não quiser ter muitos ecos no seu código. Por exemplo, nos meus
.phtml
arquivos (Zend Framework) vou escrever algo como isto:fonte
{}
também. Nenhum eco extra é necessário<?php if(...){ ?> ... <?php }else{ ?> ... <?php } ?>
. Qual é a diferença<?php if(...): ?> ... <?php else: ?> ... <?php endif ?>
?Eu pessoalmente odeio a sintaxe alternativa. Uma coisa boa sobre os aparelhos é que a maioria dos IDEs, vim, etc, todos têm destaque de suporte. No meu editor de texto, posso clicar duas vezes em uma chave e ela destacará todo o bloco, para que eu possa ver onde termina e começa com muita facilidade.
Não conheço um único editor que possa destacar endif, endforeach etc.
fonte
endif
como final de bloco corretamente. Caso contrário, você realmente não compra nada usando,}
pois não será compatível de qualquer maneira.Eu acho que isso diz tudo:
http://ca3.php.net/manual/en/control-structures.alternative-syntax.php
Ao misturar HTML e PHP, o sytnax alternativo é muito mais fácil de ler. Em documentos PHP normais, a sintaxe tradicional deve ser usada.
fonte
Em nossa empresa, a maneira preferida para lidar com HTML é:
No final, é realmente uma questão de escolher um e continuar com ele.
fonte
<?php if(TRUE){?> test <?php }?> <?php else{ ?> test2 <?php }?>
Eles são realmente os mesmos, funcionalmente.
Mas se o assunto
endif
estiver muito longe do correspondenteif
, acho que é uma prática muito melhor fazer um comentário de referência. Só assim você pode encontrar facilmente onde foi aberto. Independentemente do idioma, é:Isso realmente se aplica a qualquer "coisa de fechamento" análoga! ;)
Além disso, em geral, os editores lidam melhor com colchetes, no sentido em que podem apontar para onde ele estava aberto. Mas mesmo isso não torna os comentários descritivos menos válidos.
fonte
Aqui é onde você pode encontrá-lo na documentação oficial: PHP: Sintaxe alternativa para estruturas de controle
fonte
Eu acho que é particularmente claro quando você usa uma mistura de
if
s,for
es eforeach
es nos scripts de exibição:em oposição a:
Isso é especialmente útil para instruções de controle longas, nas quais talvez você não consiga ver a declaração superior da chave inferior.
fonte
Eu acho que realmente depende do seu estilo de codificação pessoal. Se você está acostumado a C ++, Javascript etc., pode se sentir mais confortável usando a sintaxe {}. Se você está acostumado ao Visual Basic, convém usar o if: endif; sintaxe.
Não tenho certeza se alguém pode dizer definitivamente que um é mais fácil de ler do que o outro - é a preferência pessoal. Eu costumo fazer algo assim:
Se é mais fácil ler do que:
é uma questão de opinião. Eu posso ver por que alguns acham que a segunda maneira é mais fácil - mas apenas se você não estiver programando em Javascript e C ++ a vida toda. :)
fonte
Eu usaria a primeira opção, se possível, independentemente da nova opção. A sintaxe é padrão e todo mundo sabe disso. Também é compatível com versões anteriores.
fonte
Ambos são iguais.
Mas: se você deseja usar o PHP como sua linguagem de modelagem nos arquivos de exibição (o V do MVC), pode usar esta sintaxe alternativa para distinguir entre o código php escrito para implementar a lógica de negócios (partes de MVC) e orientação. lógica. Claro que não é obrigatório e você pode usar a sintaxe que desejar.
A ZF usa essa abordagem.
fonte
Não há diferença técnica entre as duas sintaxes. A sintaxe alternativa não é nova; foi suportado pelo menos desde o PHP 4, e talvez até mais cedo.
Você pode preferir o formulário alternativo, porque afirma explicitamente qual estrutura de controle está terminando:
endwhile
por exemplo, pode terminar apenas umwhile
bloco, enquanto que, se você encontrar um colchete, ele poderá fechar qualquer coisa.Você pode preferir a sintaxe tradicional, se usar um editor que tenha suporte especial para chaves em outras sintaxes do tipo C. O Vim, por exemplo, suporta várias pressionamentos de teclas para navegar para chaves correspondentes e para o início e o fim de blocos delimitados por chave. A sintaxe alternativa quebraria esse recurso do editor.
fonte
No final, você simplesmente não quer procurar a seguinte linha e depois adivinhar onde começou:
Tecnicamente e funcionalmente, eles são os mesmos.
fonte
endif;
que vai ser difícil encontrar o começo para, porque eles não têm uma função semelhante para isso, e código VB-estilo não ninho bem.Tudo depende. Pessoalmente, prefiro a sintaxe tradicional com ecos e muitos recuos, pois é muito mais fácil de ler.
Concordo que a sintaxe alt é mais limpa com as diferentes cláusulas finais, mas eu realmente tenho dificuldade em lidar com elas sem a ajuda do destaque do editor de texto, e não estou acostumado a ver código "condensado" como este:
fonte
Eu costumava usar os chavetas, mas hoje em dia eu prefiro usar essa sintaxe alternativa de mão curta devido à legibilidade e acessibilidade do código.
fonte
Pessoalmente, prefiro fazê-lo em duas seções separadas, mas dentro do mesmo PHP, como:
Mas talvez seja mais lento?
fonte
Eu acho que é uma questão de preferência. Eu pessoalmente uso:
fonte
Eu costumava usar colchetes para condições "if, else". No entanto, eu encontrei "if (xxx): endif;" é mais semântico se o código estiver muito encapsulado e mais fácil de ler em qualquer editor.
Naturalmente, muitos editores são capazes de reconhecer e destacar trechos de código quando colchetes são selecionados. Alguns também se saem bem no par "if (xxx): endif" (por exemplo, NetBeans)
Pessoalmente, eu recomendaria "if (xxx): endif", mas para verificação de condição pequena (por exemplo, apenas uma linha de código), não há muitas diferenças.
fonte
Sinto que nenhuma das respostas preexistentes identifica completamente a resposta aqui, então vou articular minha própria perspectiva. Funcionalmente, os dois métodos são os mesmos. Se o programador estiver familiarizado com outros idiomas seguindo a sintaxe C, provavelmente se sentirá mais confortável com o aparelho, ou se o php for o primeiro idioma que estiver aprendendo, ele se sentirá mais confortável com a
if
endif
sintaxe, pois parece mais próximo para linguagem regular.Se você é um programador realmente sério e precisa fazer as coisas com rapidez, acredito que a sintaxe entre chaves é superior porque economiza tempo ao digitar
comparado com
Isto é especialmente verdade com outros loops, digamos,
foreach
onde você acabaria digitando 10 caracteres extras. Com chaves, você só precisa digitar dois caracteres, mas para a sintaxe baseada em palavras-chave, você precisa digitar uma palavra-chave extra inteira para cada loop e declaração condicional.fonte