If-Else的意外行为

时间:2015-10-07 11:23:49

标签: php if-statement yii2

我尝试根据会话中的值在我的标题中显示登录/注销链接。我试过这样的事情

<ul class="nav navbar-nav navbar-right text-uppercase">

                        <li><a href="<?php echo \Yii::$app->getUrlManager()->createUrl( [ 'site/contactus' ] ); ?>">Contact</a></li>
                        <li><a href="<?php echo \Yii::$app->getUrlManager()->createUrl( [ 'site/modules' ] ); ?>">FAQ</a></li>
                        <?php
                        $session = Yii::$app->session;
                        $user_id = $session->get('userid');//print_r($user_id);die();
                        if($user_id != null)
                        {?>
                        <li><a href="<?php echo \Yii::$app->getUrlManager()->createUrl( [ 'userdetails/logout' ] ); ?>">Logout</a></li>
                        <?php}
                        else 
                        {?>
                        <li><a href="<?php echo \Yii::$app->getUrlManager()->createUrl( [ 'userdetails/login' ] ); ?>">Login</a></li>
                        <?php } ?>  

                    </ul>

然后两个链接都没有出现在标题中(登录/注销)。经过大量尝试后,我想出了这段代码

   <ul class="nav navbar-nav navbar-right text-uppercase">

                            <li><a href="<?php echo \Yii::$app->getUrlManager()->createUrl( [ 'site/contactus' ] ); ?>">Contact</a></li>
                            <li><a href="<?php echo \Yii::$app->getUrlManager()->createUrl( [ 'site/modules' ] ); ?>">FAQ</a></li>
                            <?php
                            $session = Yii::$app->session;
                            $user_id = $session->get('userid');//print_r($user_id);die();
                            if($user_id != null)
                            {
                            ?>
                            <li><a href="<?php echo \Yii::$app->getUrlManager()->createUrl( [ 'userdetails/logout' ] ); ?>">Logout</a></li>
                            <?php
                            }
                            else
                            {
                            ?>
                            <li><a href="<?php echo \Yii::$app->getUrlManager()->createUrl( [ 'userdetails/login' ] ); ?>">Login</a></li>
                            <?php
                            }
                            ?>              
                        </ul>

代码实际上是相同的,但我在大括号'{'之间添加了一些空格。它按照我的意图工作。当我们使用html和yii2代码组合时,空间是一个问题吗?

2 个答案:

答案 0 :(得分:2)

这与Yii无关,它只是一个php语法问题(你应该在<?php之后总是有空格...)

如果你想混合条件和html输出,并且具有更好的可读性,你应该使用它:

<?php if ($user_id != null) : ?>
Output 1
<?php else : ?>
Output 2
<?php endif; ?>

了解详情:http://php.net/manual/en/control-structures.alternative-syntax.php

答案 1 :(得分:1)

HAS 是开放<?php标记后的空格,这意味着<?php}无效:

没有空格:

$ cat z.php
<?php if(true) {?>
true
<?php} else {?>   // note, no space after <?php
false
<?php }?>
$ php z.php
true
<?php} else {?>
false

有空格:

$ cat y.php
<?php if(true) {?>
true
<?php } else {?>
false
<?php }?>
$ php y.php
true

注意输出的差异。这与Yii没有关系,而且与你的核心PHP编码有关。