为什么PHP代码在HTML之前执行?

时间:2016-07-15 15:48:15

标签: php html mysql oop

我已经学习了几个星期的PHP,现在我正在编写一个结合了MySQL数据库,OOP 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''>";

再一次,首先加载图像文本。

输出是文本中的图像链接,以及用于模拟未加载图像的chrome图标。

link to image output

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

编辑:

“get_name()”函数的代码:

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

2 个答案:

答案 0 :(得分:9)

echo执行IMMEDIATE输出。如果您尝试回显一个本身进行回声的函数,则函数的回显执行FIRST。 e.g。

function foo() {
   echo 'foo';
}

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

并执行相当于

echo 'foo';
echo 'bar';

为什么呢?因为echo首先要构造输出的字符串。因此,在回显bar之前,父回显必须调用foo()。该功能不会返回任何内容,它只是执行自己的回声。多个echo调用不会相互协调,因此foo的echo会输出它。然后foo不会向父回显返回任何内容,因此您正在执行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

答案 1 :(得分:1)

将函数get_name()的结构更改为

org.example

它会正常工作