Есть такая конструкция кода
abstract class Main
{
protected $name = 'Main';
public function callMe()
{
return $this->foo();
}
public function foo()
{
throw new Exception('Foo Not Found');
}
protected function getName()
{
return $this->name;
}
}
class One extends Main
{
public function foo()
{
$name = $this->getName();
echo "Hello from class ".$name."\n";
}
public function getName()
{
echo "Two";
}
}
Создаю объект, и вызываю метод callMe()
$one = new One();
$one->callMe();
Но выводит она мне
TwoHello from class
а не
Hello from class Two
c return работает все норм,
public function getName()
{
return "Two";
}
но почему echo выводит two до выражения? если оно должно как бы присваиваться переменной?
echo выводит строку. Это совсем не одно и то же, что возвращает строку. На самом деле echo знает о некотором месте, в которое надо направлять вывод (обычно это стандартный поток вывода). Фактически echo ведёт себя как процедура, она изменяет внешнее состояние и ничего не возвращает. Для вашего примера это означает, что сразу после вызова echo в стандартный вывод попадёт Two
и только потом будет вызвана следующая echo и она добавит в стандартный вывод Hello from class
. Отсюда TwoHello from class
.
Учитывая всё вышесказанное, при разработке своих программ следует избегать вызовов echo. И сокраить работу с вводом до единственного echo.
class One extends Main
{
public function foo()
{
$name = $this->getName();
return "Hello from class ".$name."\n";
}
public function getName()
{
return "Two";
}
}
$one = new One();
echo $one->callMe();
Вызывая echo в недрах своей программы вы ничего не знаете о состоянии вывода на данный момент, и как видно из вашего примера, даже всего два echo
могут вызвать путаницу.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
При клике на кнопку,всплывает модалька бутстрапа с формой, после отправки формы появляется модалька "Спасибо, бла бла"без ajax форма работает,...
Собственно, пришёл с таким вопросом, почему не проходят данные в БД? Как ни пробовал, убирал одинарные кавычки, обычные, ставил даже там где...
Подскажите пожалуйста, как правильно найти и вывести данные из бд, чтобы сообщения выводились построчно и последовательно, только мне и только...
Есть группа в ВКонтакте, я получаю список всех участников группы и записываю их идентификаторы в базу данных