Pergunta

Eu tenho algum código legado que tem o seguinte:

<?PHP
    if(isset($_GET['pagina'])=="homepage") {
?>
HtmlCode1
<?php 
} else { 
?>
HtmlCode2
<?php 
} 
?>

Eu não sei exatamente o porquê, mas isso parece estar funcionando. O HTMLCODE1 é carregado quando eu tenho? Pagina = página inicial eo HTMLCODE2 é carregado quando a pagina var não existe ou é outra coisa (realmente não tenho visto com outra coisa, simplesmente não existe). O site está usando php4 (não sei a versão exata). Mas realmente, como pode este trabalho? Eu olhei para o manual e diz retornos Isset um bool ..

Qualquer um?

Foi útil?

Solução

O problema é que "==" não é uma comparação sensível ao tipo. Qualquer (não-vazia) string é "igual" para booleano verdadeiro, mas não idênticas a ele (para que você precisa para usar o operador "===").

Um exemplo rápido, por que você está vendo esse comportamento:
http: //codepad.org/aNh1ahu8

E para mais detalhes sobre o assunto a partir da documentação, consulte:
http://php.net/manual/en/language.operators.comparison.php
http://ca3.php.net/manual/en/types.comparisons.php (as "comparações solto com ==" mesa especificamente)

Outras dicas

isset() retorna verdadeiro ou falso. Em uma comparação boolean, "homepage" iria avaliar a true. Então, basicamente você tem aqui:

if ( isset($_GET['pagina']) == true )

Se pagina é igual a nada, você vai ver HTMLCODE1. Se não é definido, você vai ver HTMLCODE2.

Eu apenas tentei para confirmar isso, e vai ?pagina=somethingelse faz não mostrar HTMLCODE2.

Eu suspeito que é um erro, uma vez que realmente não faz sentido comparar verdadeiro / falso com "homepage". Espero que o código deve realmente ser:

if (isset($_GET['pagina']) && ($_GET['pagina'] == "homepage")) {
}

Algumas idéias como isso poderia funcionar (além do "homepage" mencionado anteriormente == true):

  • em algum lugar Isset foi redefinido?
  • É uma versão auto-modificada do PHP?
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top