只是想知道为什么下面的代码会出现“意外的T_ELSE”语法错误:
<?php if (isset($_SESSION["user_id"])) { ?>
<h2>Welcome, <?php echo $_SESSION["user_id"]; ?></h2>
<?php } ?>
<?php else { ?>
<form action="" method="post">
<label for="user">User ID</label>
<input type="text" id="user" />
<label for="password">Password</label>
<input type="password" id="password" />
<input type="submit" value="Login" />
</form>
<?php } ?>
虽然我保持} else {在同一行,但它工作正常。我的意思是下面的代码工作正常:
<?php if (isset($_SESSION["user_id"])) { ?>
<h2>Welcome, <?php echo $_SESSION["user_id"]; ?></h2>
<?php } else { ?>
<form action="" method="post">
<label for="user">User ID</label>
<input type="text" id="user" />
<label for="password">Password</label>
<input type="password" id="password" />
<input type="submit" value="Login" />
</form>
<?php } ?>
答案 0 :(得分:1)
本身并没有什么奇怪的,这是因为你在一个单独的代码块中,这是最简单的方法。当你“离开PHP”时没有什么是开放的,所以当你回到它时没有上下文。
考虑你的代码(当然,只是为了强调这一点,将其视为伪代码):
if (isset($_SESSION["user_id"])) {
// ....
}; else {
// ....
}
有时候闯入/退出PHP可能会很棘手,而在第一个例子中管理它就像你想要的那样并不是很有意义。
您可能需要考虑使用此功能,这样无论如何都会将else
块转换到一行:
<?php if (isset($_SESSION["user_id"])): ?>
<h2>Welcome, <?php echo $_SESSION["user_id"]; ?></h2>
<?php else: ?>
<form action="" method="post">
<label for="user">User ID</label>
<input type="text" id="user" />
<label for="password">Password</label>
<input type="password" id="password" />
<input type="submit" value="Login" />
</form>
<?php endif ?>
在一天结束时,PHP非常灵活,我不希望它允许你做你想做的事情。这样就可以将else
块添加到数英里之外,这可能根本不是意图。
答案 1 :(得分:1)
在我看来,如果没有前面的else
,则无法使用if
语句启动新的代码块。
你可以......
A)将代码写在一个块中,例如
<?php }
else { ?>
B)或use the alternative syntax,如果您正在使用多个代码块:
<?php if (isset($_SESSION["user_id"])): ?>
/* … */
<?php else: ?>
/* … */
<?php endif; ?>
答案 2 :(得分:1)
<?php } ?>
^^
当PHP解析文件时,它会查找开始和结束标记,这些标记告诉PHP启动和停止解释它们之间的代码。以这种方式解析允许PHP嵌入到各种不同的文档中,因为PHP解析器会忽略一对开始和结束标记之外的所有内容。
当PHP解析器到达此行时,它仅执行if块。之后,PHP解析器尝试解析下一个代码块( else part ),但此处以else {
开头,因此else
与if
分开并产生错误。
答案 3 :(得分:1)
稍微思考一下,我已经意识到这必须是预期的行为。
考虑以下(语法错误的)示例:
<?php if ($condition == true) { ?>
<div id="first">Yey</div>
<?php } ?>
<span id="second?">where am I?</span>
<?php else { ?>
<div id="first">Ney</div>
<?php } ?>
span元素将处于未定义状态