PHP中出现意外的T_ELSE错误

Jac*_*sta 3 php if-statement syntax-error

我正在研究一本来自php书籍的例子,并且在第8行使用此代码收到错误

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


?>
Run Code Online (Sandbox Code Playgroud)

cod*_*ict 14

;在结束if发言.

错误原因:

if(...) ;
{
...
}
Run Code Online (Sandbox Code Playgroud)

不会造成任何语法错误,因为身体if空的和下面的块总是被执行.但

if(...) ;
{
  // blk A
} else {
...
}
Run Code Online (Sandbox Code Playgroud)

会导致Unexpected else语法错误,因为ifas之前有空体,后跟另一个块blk A,而不是if的主体.现在当else在块之后找到if 时,它无法与任何if导致此错误的任何内容匹配.如果我们statement代替一个区块,也会发生同样的情况:

if(...) ;
 do_something;
else {
...
}
Run Code Online (Sandbox Code Playgroud)


cle*_*tus 6

尝试:

$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;
Run Code Online (Sandbox Code Playgroud)

两件事情:

  1. 你的if子句末尾有一个分号.这意味着后续的开括号是一个始终执行的本地块.这导致了一个问题,因为后来你有一个else没有附加到if声明的声明; 和

  2. "$agent"是不必要的,不推荐.简单地传入$agent.