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?

È stato utile?

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?
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top