Магический метод toString в ООП в PHP

Первый магический метод, который мы изучим, называется __toString. Он вызывается при попытке приведения экземпляра класса к строке. Давайте разберемся, что это значит. Пусть у нас дан вот такой класс User:

User.php<?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;
    }
  }
?>

Давайте создадим объект этого класса:

index.php<?php
  $user = new User('john', 25);
?>

А теперь попытаемся вывести созданный объект через echo:

index.php<?php
  $user = new User('john', 25);
  echo $user;
?>

Попытка сделать вывод объекта через echo и есть преобразование к строке. В данном случае PHP выдаст ошибку, так как просто так объекты в строку не преобразуются.

Для того, чтобы убрать ошибку, мы должны в явном виде сказать PHP, что делать при попытке преобразовать объект в строку. Для этого и существует магический метод __toString.

Если в коде нашего класса сделать такой метод, то результат этого метода (то есть то, что он вернет через return) и будет строковым представлением объекта.

Пусть мы хотим, чтобы при попытке вывести объект через echo, выводилось имя юзера. Значит сделаем метод __toString и вернем в нем значение свойства name:

User.php<?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;
    }
  }
?>

Проверим:

index.php<?php
  $user = new User('john', 25);
  echo $user; // выведет 'john' - все работает!
?>
Задание 1

Сделайте класс User, в котором будут свойства name и surn. Сделайте так, чтобы при выводе объекта через echo на экран выводилась строка с именем и фамилий пользователя.