Maagiline meetod toString OOP-s PHP-s

Esimene maagiline meetod, mida me õpime, kannab nime __toString. Seda kutsutakse välja, kui proovitakse klassi eksemplari stringiks teisendada. Mõtleme välja, mida see tähendab. Olgu meil antud selline klass 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;
    }
  }
?>

Loome selle klassi objekti:

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

Nüüd proovime loodud objekti välja printida läbi echo:

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

Katse teha objekti väljund läbi echo ongi teisendus stringiks. Sellel juhul annab PHP vea, kuna lihtsalt niimoodi ei teisendata objekte stringiks.

Selleks, et viga eemaldada, peame selgesõnaliselt ütlema PHP-le, mida teha kui proovitakse objekti stringiks teisendada. Selleks ongi olemas maagiline meetod __toString.

Kui meie klassi koodis teha selline meetod, siis selle meetodi tulemus (see tähendab, mida see tagastab läbi return) ongi objekti stringiline esitus.

Oletame, et me tahame, et kui proovitakse objekti välja printida läbi echo, prinditaks kasutaja nimi. Seega teeme meetodi __toString ja tagastame selles omaduse name väärtuse:

User.php<?php
  class User
  {
    private $name;
    private $age;
    
    public function __construct($name, $age)
    {
      $this->name = $name;
      $this->age = $age;
    }
    
    // Rakendame määratud meetodi:
    public function __toString()
    {
      return $this->name;
    }
    
    public function getName()
    {
      return $this->name;
    }
    
    public function getAge()
    {
      return $this->age;
    }
  }
?>

Kontrollime:

index.php<?php
  $user = new User('john', 25);
  echo $user; // prindib 'john' - kõik töötab!
?>
Задание 1

Tehke klass User, milles on omadused name ja surn. Tehke nii, et objekti printimisel läbi echo ekraanile prinditaks kasutaja ees- ja perekonnanimega string.