我已经学习了几个星期的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图标。
有人可以帮帮我吗?谢谢!如果需要代码中的任何代码,请告诉我,我只写了我认为相关但我可能错了。
编辑:
“get_name()”函数的代码:
function get_name() {
echo get_user_data($this->user_id,"name");
}
答案 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
它会正常工作