Maaginen toString-metodi OOP:ssa PHP:ssä

Ensimmäinen maaginen metodi, jonka opimme, on nimeltään __toString. Se kutsutaan, kun luokan instanssia yritetään muuntaa merkkijonoksi. Selvitetään, mitä tämä tarkoittaa. Oletetaan, että meillä on tällainen User-luokka:

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

Luodaan olio tästä luokasta:

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

Yritetään nyt tulostaa luotu olio echo-komennolla:

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

Yritys tulostaa olio echo-komennolla on muunnos merkkijonoksi. Tässä tapauksessa PHP antaa virheen, koska olioita ei voi muuntaa merkkijonoon suoraan.

Poistaaksemme virheen, meidän on näytettävä PHP:lle, mitä tehdä, kun oliota yritetään muuntaa merkkijonoksi. Tätä varten on olemassa maaginen metodi __toString.

Jos luomme tällaisen metodin luokkaamme, niin tämän metodin tulos (eli se, mitä se palauttaa return-komennolla) on olion merkkijonoesitys.

Oletetaan, että haluamme, että kun oliota yritetään tulostaa echo-komennolla, tulostuu käyttäjän nimi. Eli teemme metodin __toString ja palautamme siinä name-ominaisuuden arvon:

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

Testataan:

index.php<?php
  $user = new User('john', 25);
  echo $user; // tulostaa 'john' - kaikki toimii!
?>
Задание 1

Tee luokka User, jossa on ominaisuudet name ja surn. Tee niin, että kun oliota tulostetaan echo-komennolla näytölle, tulostuu merkkijono käyttäjän etu- ja sukunimellä.