Magická metóda toString v OOP v PHP

Prvá magická metóda, ktorú študujeme, sa volá __toString. Je volaná pri pokuse o prevedenie inštancie triedy na reťazec. Poďme zistiť, čo to znamená. Predpokladajme, že máme danú takúto triedu 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;
    }
  }
?>

Vytvorme objekt tejto triedy:

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

A teraz sa pokúsme vypísať vytvorený objekt cez echo:

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

Pokus o vykonanie výstupu objektu cez echo je premena na reťazec. V tomto prípade PHP vypíše chybu, pretože jednoducho tak sa objekty na reťazec neprevedú.

Aby sme odstránili chybu, musíme explicitne povedať PHP, čo robiť pri pokuse o premenu objektu na reťazec. Pre to existuje magická metóda __toString.

Ak v kóde našej triedy vytvoríme takúto metódu, tak výsledok tejto metódy (teda to, čo vráti cez return) bude reťazcovým vyjadrením objektu.

Predpokladajme, že chceme, aby pri pokuse o výstup objektu cez echo, sa vypísalo meno používateľa. Takže urobme metódu __toString a vráťme v nej hodnotu vlastnosti name:

User.php<?php
  class User
  {
    private $name;
    private $age;
    
    public function __construct($name, $age)
    {
      $this->name = $name;
      $this->age = $age;
    }
    
    // Realizujeme uvedenú metódu:
    public function __toString()
    {
      return $this->name;
    }
    
    public function getName()
    {
      return $this->name;
    }
    
    public function getAge()
    {
      return $this->age;
    }
  }
?>

Skontrolujme:

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

Vytvorte triedu User, v ktorej budú vlastnosti name a surn. Urobte tak, aby pri výpise objektu cez echo na obrazovku sa vypísal reťazec s menom a priezviskom používateľa.