Isset eski sürümlerinde farklı çalışır mı

4 Cevap php

Ben bu olan bazı eski kod var:

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

I don't know exactly why but this seems to be working. The htmlcode1 is loaded when I have ?pagina=homepage and the htmlcode2 is loaded when the pagina var doesn't exist or is something else (haven't really seen with something else, just not there). The website is using php4 (don't know the exact version). But really, how can this work? I looked at the manual and it says isset returns a bool..

Herkes?

4 Cevap

Sorun "==" bir tür duyarlı karşılaştırma değil olmasıdır. Herhangi bir (boş olmayan) bir dize true boolean için "eşit" değil, ama identical ona (bunun için "===" operatörünü kullanmanız gerekir).

A quick example, why you're seeing this behavior:
http://codepad.org/aNh1ahu8

And for more details about it from the documentation, see:
http://php.net/manual/en/language.operators.comparison.php
http://ca3.php.net/manual/en/types.comparisons.php (the "Loose comparisons with ==" table specifically)

isset() true veya false döndürür. Bir boolean karşılaştırıldığında, "homepage" true için değerlendirmek istiyorum. Yani aslında burada var:

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

Pagina şey eşitse, sen HtmlCode1 göreceksiniz. Hiçbir set ise, HtmlCode2 göreceksiniz.

Ben sadece bu onaylamak için çalıştı, ve ?pagina=somethingelse not HtmlCode2 göstermektedir gidiyor.

Ben gerçekten "ana" ile doğru / yanlış karşılaştırmak mantıklı değil gibi bir hata olduğunu sanıyorum. Ben kodu aslında olmalıdır beklediğiniz:

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

Bazı fikirler nasıl bu (dışında daha önce bahsedilen "ana" == true) işe yarayabilir:

  • Isset yerde yeniden olmuştur?
  • PHP bir öz-değiştirilmiş bir versiyonu bulunuyor?