Isset ha funzionato diversamente nelle versioni precedenti
-
03-07-2019 - |
Domanda
Ho un codice legacy che ha questo:
<?PHP
if(isset( Ho un codice legacy che ha questo:
<*>
Non so esattamente perché, ma questo sembra funzionare. L'htmlcode1 viene caricato quando ho? Pagina = homepage e l'htmlcode2 viene caricato quando la pagina var non esiste o è qualcos'altro (non l'ho mai visto con qualcos'altro, ma non lì).
Il sito Web utilizza php4 (non conosco la versione esatta).
Ma davvero, come può funzionare? Ho guardato il manuale e dice che isset restituisce un valore ..
Chiunque?
GET['pagina'])=="homepage") {
?>
HtmlCode1
<?php
} else {
?>
HtmlCode2
<?php
}
?>
Non so esattamente perché, ma questo sembra funzionare. L'htmlcode1 viene caricato quando ho? Pagina = homepage e l'htmlcode2 viene caricato quando la pagina var non esiste o è qualcos'altro (non l'ho mai visto con qualcos'altro, ma non lì). Il sito Web utilizza php4 (non conosco la versione esatta). Ma davvero, come può funzionare? Ho guardato il manuale e dice che isset restituisce un valore ..
Chiunque?
Soluzione
Il problema è che " == " non è un confronto sensibile al tipo. Qualsiasi stringa (non vuota) è " uguale " per booleano vero, ma non identico (per questo è necessario utilizzare l'operatore " === ").
Un rapido esempio, perché stai vedendo questo comportamento:
http: //codepad.org/aNh1ahu8
E per maggiori dettagli a riguardo dalla documentazione, vedi:
http://php.net/manual/en/language.operators.comparison.php
http://ca3.php.net/manual/en/types.comparisons.php (i confronti" sciolti "con == " tabella in particolare)
Altri suggerimenti
isset ()
restituisce vero o falso. In un confronto booleano, " homepage "
valuterebbe true
. Quindi essenzialmente sei arrivato qui:
if ( isset( isset ()
restituisce vero o falso. In un confronto booleano, " homepage "
valuterebbe true
. Quindi essenzialmente sei arrivato qui:
<*>
Se pagina è uguale a qualcosa, vedrai HtmlCode1. Se non è impostato, vedrai HtmlCode2.
Ho appena provato a confermarlo e andando su ? pagina = qualcosaelse
non mostra HtmlCode2.
GET['pagina']) == true )
Se pagina è uguale a qualcosa, vedrai HtmlCode1. Se non è impostato, vedrai HtmlCode2.
Ho appena provato a confermarlo e andando su ? pagina = qualcosaelse
non mostra HtmlCode2.
Sospetto che si tratti di un bug in quanto non ha davvero senso confrontare vero / falso con " homepage " ;. Mi aspetto che il codice dovrebbe effettivamente essere:
if (isset( Sospetto che si tratti di un bug in quanto non ha davvero senso confrontare vero / falso con " homepage " ;. Mi aspetto che il codice dovrebbe effettivamente essere:
<*>GET['pagina']) && ( Sospetto che si tratti di un bug in quanto non ha davvero senso confrontare vero / falso con " homepage " ;. Mi aspetto che il codice dovrebbe effettivamente essere:
<*>GET['pagina'] == "homepage")) {
}
Alcune idee su come potrebbe funzionare (a parte la "homepage" " == true precedentemente menzionata):
- Isset è stato ridefinito da qualche parte?
- È una versione auto-modificata di PHP?