# Магический метод 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` на экран выводилось ФИО пользователя.

← →
↑