Магический метод toString в ООП в PHP
Методы PHP, начинающиеся с двойного подчеркивания
__
, называются магическим.
Магия таких методов состоит в том, что они
могут вызываться при совершении какого-то
действия автоматически.
Первый магический метод, который мы с вами
изучим, называется __toString
. Он
вызывается при попытке приведения экземпляра
класса к строке. Давайте разберемся, что
это значит. Пусть у нас дан вот такой класс
User
:
<?php
class User
{
private $name;
private $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
}
?>
Давайте создадим объект этого класса:
<?php
$user = new User('john', 25);
?>
А теперь попытаемся вывести созданный объект
через echo
:
<?php
$user = new User('john', 25);
echo $user;
?>
Попытка сделать вывод объекта через echo
и есть преобразование к строке. В данном
случае PHP выдаст ошибку, так как просто
так объекты в строку не преобразуются.
Для того, чтобы убрать ошибку, мы должны
в явном виде сказать PHP, что делать при
попытке преобразовать объект в строку. Для
этого и существует магический метод
__toString
.
Если в коде нашего класса сделать такой метод,
то результат этого метода (то есть то, что
он вернет через return
) и будет строковым
представлением объекта.
Пусть мы хотим, чтобы при попытке вывести
объект через echo
, выводилось имя
юзера. Значит сделаем метод __toString
и вернем в нем значение свойства name
:
<?php
class User
{
private $name;
private $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
// Реализуем указанный метод:
public function __toString()
{
return $this->name;
}
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
}
?>
Проверим:
<?php
$user = new User('john', 25);
echo $user; // выведет 'john' - все работает!
?>
Сделайте класс User
, в котором будут
следующие свойства - name
, surname
,
patronymic
. Сделайте так, чтобы при
выводе объекта через echo
на экран
выводилось ФИО пользователя.