2010-04-15 3 views
3

Я работаю на примере из PHP книги, и я получаю сообщение об ошибке в строке 8 с этим кодомНепредвиденная ошибка T_ELSE в PHP

<?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; 


?> 

ответ

6

Try:

$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; 

Две вещи:

  1. Вы были с запятой в конце вашей, если положений. Это означает, что последующая открывающая скобка была локальным блоком, который всегда выполняется. Это вызвало проблему, потому что позже у вас был оператор else, который не был присоединен к оператору if; и

  2. Выполнение "$agent" не является необходимым и не рекомендуется. Просто перейдите в $agent.

+0

блестящий, спасибо за объяснение! – Jacksta

1

Почему у вас есть точка с запятой здесь? if (preg_match("/MSIE/i", "$agent")); и здесь else if (preg_match("/Mozilla/i", "$agent"));

15

В конце if есть ;.

Причина погрешности:

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

Будет не причиной любой синтаксической ошибки как тело if является пустой и следующий блок всегда запускается на выполнение. Но

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

вызовет ошибку Unexpected else синтаксиса, поскольку if, как и прежде имеет пустое тело и затем другой блок blk A, который не является, если телом. Теперь, когда else, если найден после блока, не может соответствовать любому if, вызвавшему эту ошибку. То же самое случилось бы, если бы мы statement (ы) вместо блока:

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

Отличный и тщательный анализ! – timdev

3

удалить точку с запятой в конце строк с «если» в них.

Смежные вопросы