PHP beklenmedik T_ELSE hatası [kapalı]

4 Cevap php

Ben bir php kitaptan bir örnek üzerinde çalışıyorum ve bu kod ile 8. satırda bir hata alıyorum

<?php

$agent = getenv("HTTP_USER_AGENT");
if (preg_match("/MSIE/i", "$agent"));
{
    $result = "You are using Microsoft Internet Explorer";
}
else if (preg_match("/Mozilla/i", "$agent")); 
{
    $result = "You are using Mozilla firefox";
}
else {$result = "you are using $agent"; }

echo $result;


?>

4 Cevap

Deneyin:

$agent = getenv("HTTP_USER_AGENT");
if (preg_match("/MSIE/i", $agent)) {
  $result = "You are using Microsoft Internet Explorer";
} else if (preg_match("/Mozilla/i", $agent)) {
  $result = "You are using Mozilla firefox";
} else {
  $result = "you are using $agent";
}

echo $result;

İki şey:

  1. Sen eğer hükümlerin sonunda bir virgül vardı. Yani sonraki açılış ayracı her zaman çalıştırılır yerel bir blok olduğu anlamına geliyor. Daha sonra bir if tablosuna bağlı değildi, bir else deyimi vardı çünkü bir sorun nedeniyle; ve

  2. "$agent" gereksiz ve tavsiye edilmez yapıyor. Basitçe $agent geçmek.

if tabloların sonundaki ; vardır.

Cause of error:

if(...) ;
{
...
}

not if olup empty ve aşağıdaki blok always idam olur ve vücudun herhangi bir sözdizimi hatasına sebep olur. Ancak

if(...) ;
{
  // blk A
} else {
...
}

Unexpected else sözdizimi hatası neden olur, çünkü if gibi önce boş bir gövdeye sahip ve en eğer beden değil başka bir blok blk A tarafından takip edilmektedir. Şimdi ne zaman bir else o cannot herhangi bir if bu hataya neden ile eşleşen bloktan sonra bulursa. Eğer ediyorum statement (ler) aynı bir blok yerine olur:

if(...) ;
 do_something;
else {
...
}

ile satır sonuna gelen yarı-iki nokta üst üste kaldırın "eğer" onları.

Neden bir noktalı virgül burada var mı? if (preg_match("/MSIE/i", "$agent")); ve burada else if (preg_match("/Mozilla/i", "$agent"));