Será que isset funcionam de forma diferente em versões mais antigas
-
03-07-2019 - |
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?
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?