Я изучаю 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''>";
и еще раз, текст изображения загружается первым.
Вывод представляет собой ссылку на изображение в тексте, и этот значок хрома, который символизирует, что изображение не было загружено.
ссылка на вывод изображения
Кто-нибудь может мне помочь? Спасибо! Если нужны какие-либо другие фрагменты кода, скажите мне, я написал только то, что, по моему мнению, имеет значение, но я могу ошибаться.
РЕДАКТИРОВАТЬ:
Код функции get_name ():
function get_name() { echo get_user_data($this->user_id,"name"); }
echo
выводит IMMEDIATE. Если вы попытаетесь выполнить эхо-функцию, которая сама выполняет эхо-сигнал, эхо-функция выполняет FIRST. например
function foo() { echo 'foo'; } echo 'bar' . foo(); // output foobar
и выполняется как эквивалент
echo 'foo'; echo 'bar';
Зачем? Поскольку echo
сначала должен построить вывод строки. Таким образом, до того, как bar
может быть эхом, родительское эхо должно вызвать foo()
. Эта функция ничего не возвращает, она просто выполняет свое собственное эхо. множественные echo
вызовы не координируют друг с другом, поэтому эхо foo выводит его. то foo ничего не возвращает в родительское эхо, поэтому вы выполняете echo 'bar' . null
echo 'bar' . null
и вывод.
Если у вас есть это:
function bar() { return 'bar'; } echo 'foo' . bar();
он будет работать, как ожидалось. Последовательность выполнения:
$temp = bar(); // $temp gets string'bar' echo 'foo' . $temp; echo 'foo' . 'bar'; echo 'foobar'; -> output foobar
измените структуру функции get_name () на
function get_name() { return get_user_data($this->user_id,"name"); }
и он будет работать нормально