为什么PHP代码的HTML之前执行?(Why is the PHP code executing b

2019-09-29 07:34发布

我一直在学习PHP的几个星期和现在我正在写结合了MySQL数据库,面向对象的PHP和PHP会话脚本。

眼下,那里有网站,显示你的名字,如果你登录(即如果会话变量被设置)对位,和登录框,如果你没有登录。

 <?php
                if(!isset($_SESSION['username'])) {
                    echo "<h3>Login</h3>
                     include("login.php");
                } else {
                    echo "<h3>Welcome</h3> ". $user->get_name();
                    echo"<br><a href='logout.php'>Log-out</a>";
                }
            ?>

假设有一个会议,上面的代码应该是输出: Welcome Alex!

但是,如果我运行的结果是:

Alex
Welcome

为了迅速解决它,我发现,如果我这样做:

 echo "<h3>Welcome</h3> ;
    echo $user->get_name();
    echo"<br><a href='logout.php'>Log-out</a>";

它修复它。 也就是说,如果我打破了发言分为两个回声和文本输出正确。 当然,我知道这可能不是解决它,因为我需要添加以下代码的好方法:

echo "<img src='".$user->get_photo()." border='5''>";

再次,加载图像文首。

输出是文本的图像链接,并simbolizes将图像没有被加载的是Chrome浏览器图标。

链接到图像输出

有人可以帮我吗? 谢谢! 如果需要任何代码的opther位,请告诉我,我只写了什么,我认为这是相关的,但我可能是错的。

编辑:

守则 “GET_NAME()” 函数:

function get_name() {
            echo get_user_data($this->user_id,"name");
        }

Answer 1:

echo不IMMEDIATE输出。 如果您尝试呼应它本身确实回声函数,该函数的回声首先执行。 例如

function foo() {
   echo 'foo';
}

echo 'bar' . foo();   // output foobar

并执行作为相当于

echo 'foo';
echo 'bar';

为什么? 因为echo首先必须构建串被输出。 所以之前bar可以呼应,家长回声必须调用foo() 该函数不返回任何东西,它只是执行自己的回声。 多重echo调用不相互配合,所以富的回波就其输出。 然后FOO没有返回到父回声,所以你在做echo 'bar' . null echo 'bar' . null和输出bar

如果你有这样的:

function bar() {
   return 'bar';
}

echo 'foo' . bar();

如预期它会工作。 执行顺序将是:

$temp = bar(); // $temp gets string'bar'
echo 'foo' . $temp;
echo 'foo' . 'bar';
echo 'foobar';
-> output foobar


Answer 2:

改变功能GET_NAME的结构()来

function get_name() {
            return get_user_data($this->user_id,"name");
        }

它会很好地工作



文章来源: Why is the PHP code executing before the HTML?
标签: php html mysql oop