Magická metoda toString v OOP v PHP

První magická metoda, kterou budeme studovat, se jmenuje __toString. Je volána při pokusu o převedení instance třídy na řetězec. Pojďme si vysvětlit, co to znamená. Předpokládejme, že máme danou tuto třídu 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;
    }
  }
?>

Vytvořme objekt této třídy:

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

A nyní zkusme vytvořit vytvořený objekt pomocí echo:

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

Pokus o výpis objektu pomocí echo je převod na řetězec. V tomto případě PHP vypíše chybu, protože objekty se tak snadno na řetězec nepřevádějí.

Abychom odstranili chybu, musíme explicitně říci PHP, co dělat při pokusu o převedení objektu na řetězec. K tomu slouží magická metoda __toString.

Pokud v kódu naší třídy vytvoříme takovou metodu, pak výsledek této metody (tedy to, co vrátí přes return) bude řetězcovou reprezentací objektu.

Předpokládejme, že chceme, aby se při pokusu o výpis objektu pomocí echo, vypsalo jméno uživatele. To znamená, že vytvoříme metodu __toString a vrátíme v ní hodnotu vlastnosti name:

User.php<?php
  class User
  {
    private $name;
    private $age;
    
    public function __construct($name, $age)
    {
      $this->name = $name;
      $this->age = $age;
    }
    
    // Implementujeme uvedenou metodu:
    public function __toString()
    {
      return $this->name;
    }
    
    public function getName()
    {
      return $this->name;
    }
    
    public function getAge()
    {
      return $this->age;
    }
  }
?>

Ověřme:

index.php<?php
  $user = new User('john', 25);
  echo $user; // vypíše 'john' - vše funguje!
?>
Задание 1

Vytvořte třídu User, ve které budou vlastnosti name a surn. Zařiďte, aby při výpisu objektu pomocí echo na obrazovku se vypsal řetězec se jménem a příjmením uživatele.