A varázslatos toString metódus az OOP-ban PHP-ben

Az első varázslatos metódus, amelyet megismerünk, a __toString nevet viseli. Akkor hívódik meg, amikor egy osztály példányát karakterlánccá próbáljuk alakítani. Nézzük meg, mit is jelent ez. Tegyük fel, hogy adott a következő User osztály:

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;
    }
  }
?>

Hozzuk létre az osztály egy objektumát:

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

Most pedig próbáljuk meg kiírni a létrehozott objektumot a echo segítségével:

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

Az objektum echo-val való kiírásának kísérlete maga a karakterlánccá alakítás. Ebben az esetben a PHP hibaüzenetet fog kiadni, mivel egyszerűen az objektumok nem alakíthatók át így karakterlánccá.

Ahhoz, hogy a hibát megszüntessük, egyértelműen meg kell mondanunk a PHP-nak, mit tegyen, amikor egy objektumot karakterlánccá próbálnak alakítani. Erre szolgál a __toString varázslatos metódus.

Ha az osztályunk kódjában létrehozunk egy ilyen metódust, akkor ennek a metódusnak az eredménye (vagyis amit a return-nel visszaad) lesz az objektum karakterlánc reprezentációja.

Tegyük fel, hogy azt szeretnénk, hogy amikor az objektumot echo-val próbáljuk kiírni, a felhasználó neve jelenjen meg. Ezért készítsük el a __toString metódust és adjuk vissza benne a name tulajdonság értékét:

User.php<?php
  class User
  {
    private $name;
    private $age;
    
    public function __construct($name, $age)
    {
      $this->name = $name;
      $this->age = $age;
    }
    
    // Megvalósítjuk a megadott metódust:
    public function __toString()
    {
      return $this->name;
    }
    
    public function getName()
    {
      return $this->name;
    }
    
    public function getAge()
    {
      return $this->age;
    }
  }
?>

Teszteljük:

index.php<?php
  $user = new User('john', 25);
  echo $user; // kiírja 'john' - minden működik!
?>
Задание 1

Készítsen egy User osztályt, amelyben name és surn tulajdonságok lesznek. Állítsa be úgy, hogy amikor az objektumot echo-val írjuk ki a képernyőre, a felhasználó keresztneve és vezetékneve jelenjen meg.