我在 php 中编写代码,我发现这样的代码存在问题:
<?php if(isset($_GET['f'])) { ?>
<?php if($_GET['f']=="message_reçus") { ?>
-- another code here --
<?php } ?>
<?php } ?>
<?php else { ?>
但是当我这样写的时候:
<?php if(isset($_GET['f'])) { ?>
<?php if($_GET['f']=="message_reçus") { ?>
-- another code here --
<?php } ?>
<?php } else { ?>
有效。
我需要清楚解释在第一个版本中导致问题的原因,因为我仍然确信这两个版本在语法上都是正确的!
PHP Parser告诉我:解析错误:语法错误,意外'其他'(T_ELSE)
我不需要任何替代解决方案我只是想知道为什么第一个版本出现问题以及它有什么问题!
答案 0 :(得分:12)
考虑它的一种方法是将?> ... <?php
替换为echo "...";
所以你的代码变成了:
<?php
if(isset($_GET['f'])) {
echo "\n\t";
if($_GET['f'] == "message_reçus") {
echo "\n\t\t";
// more code here
echo "\n\t";
}
}
echo "\n"; // problem!
else {
// ...
}
如果你只是} else {
,那么你就不会有额外的echo "\n";
。
答案 1 :(得分:0)
问题的描述在@NietTheDarkAbsol的不同答案中有详细说明。我添加了这个答案,通过删除它来为问题添加替代解决方案。
通过分隔您在\n
或新行中添加的行,而else
必须始终位于开头if
的右大括号之后。
<?php if ($a === $b) { ?>
<?php } ?>
<?php else { ?>
这被解释为if ($a === $b) { \n } \n else {
\n
结束括号之后的if
或新行删除了解析器理解else与if
相关联并抛出错误的任何能力。
使用PHP插入HTML文件时特别有用的方法是使用替代控件结构,无需使用大括号。这也将帮助您解决当前的困境,并使您的代码看起来更清洁。
<?php if(isset($_GET['f'])) : // Colon instead of an '{' ?>
<?php if($_GET['f']=="message_reçus") : ?>
<!-- HTML here -->
<?php else : ?>
<!-- alternative HTML here -->
<?php endif; // endif; instead of an '}' ?>
<?php endif; ?>
由于您的代码现在不依赖于大括号,因此您的问题会在等待endif;
,else :
或elseif (...) :
阻止时消失。