Php 意料之外的其他。。。这个代码有什么问题?

Php 意料之外的其他。。。这个代码有什么问题?,php,if-statement,Php,If Statement,抱歉,虽然论坛上已经有相关的问题,但似乎没有一个适用于我的情况。显然这个语法有点问题,但我看不出来。我在这混了一段时间,运气不好。我猜这与试图确定变量的值有关?这是代码 <?php if( $page == 'Who We Are' ) { echo 'nothing works'; } ?> <?php elseif( $page == 'Leadership' ) { echo 'please help'; } ?> <?php else { echo 'thi

抱歉,虽然论坛上已经有相关的问题,但似乎没有一个适用于我的情况。显然这个语法有点问题,但我看不出来。我在这混了一段时间,运气不好。我猜这与试图确定变量的值有关?这是代码

<?php if( $page == 'Who We Are' ) { echo 'nothing works'; } ?>
<?php elseif( $page == 'Leadership' ) { echo 'please help'; } ?>
<?php else { echo 'this doesnt matter, because it never gets to this point!'; } ?>


$page变量被动态设置为显示页面标题,print\r确认它正确返回标题。有什么线索吗?

我想这会解决这个问题:

<?php if( $page == 'Who We Are' ) {
    echo 'nothing works'; 
}elseif( $page == 'Leadership' ) {
    echo 'please help'; 
}else {
    echo 'this doesnt matter, because it never gets to this point!'; 
} ?>


将if/elseif与php标记分开可能会导致问题。

如果出现错误,您会看到类似以下错误消息:

分析错误:语法错误,第3行testfile.php中出现意外的“elseif”(T_elseif)

基本上,它告诉您的是,您拥有的不是正确的php。这是因为在终止php标记时终止了第一条if语句

所以php看到的是:

if( $page == 'Who We Are' ) { echo 'nothing works'; } 

//end current if-else control structure
//Below is illegal.
elseif( $page == 'Leadership' ) { echo 'please help'; } 
else { echo 'this doesnt matter, because it never gets to this point!'; } 
如果您想拥有一个跨越多个php语句的controlstructure,即
,那么您应该阅读并最终得到如下内容:

<?php if( $page == 'Who We Are' ): { echo 'nothing works'; } ?>
<?php elseif( $page == 'Leadership' ): { echo 'please help'; } ?>
<?php else: { echo 'this doesnt matter, because it never gets to this point!'; } ?>
<?php endif; ?>

这可能是PHP解释器中永远无法修复的错误。PHP希望“if”语句中的任何替代项都紧跟在它们所应用的语句的右括号旁边。你在这里说的是:

START_PHP_PROCESSOR()
if (mystatement == 'mycheck') dosomething();
END_PHP_PROCESSOR()
START_PHP_PROCESSOR()
elseif (mystatement == 'mycheck2') dosomething2();
END_PHP_PROCESSOR
在这里,中断解析器会使它混淆。它无法找出它应该连接到的“if”的位置

解决问题的最好(也许是最丑陋)方法是使用有文档记录的:(冒号)替代控制块语法,如下所示:

<?php if( $page == 'Who We Are' ): echo 'nothing works'; ?>
<?php elseif( $page == 'Leadership' ): { echo 'please help'; } ?>
<?php else: echo 'this doesnt matter, because it never gets to this point!'; ?>
<?php endif; ?>


这在PHP文档中有详细说明,旨在简化模板中控制块的使用。

为什么要在每一行上打开和关闭PHP标记?部分原因是在实际代码中,我将在备选代码之间插入html。上面的代码只是代码的一个非常简化的版本,对我来说不起作用。SirBrizz和其他人非常感谢。出于某种原因,我总是认为条件句中括号和冒号的区别仅仅是文体上的。为了再次检查您的代码,第二行是否应该在echo语句周围加上括号?没有他们对我很有效…好问题。我之所以保留这些,是因为这两种“样式”都可以使用,但是当使用备用控制块语法时,大多数人不会在条件句周围使用大括号。这完全取决于你!:)