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:
<?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:
<?php
$user = new User('john', 25);
?>
Yritetään nyt tulostaa luotu olio
echo-komennolla:
<?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:
<?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:
<?php
$user = new User('john', 25);
echo $user; // tulostaa 'john' - kaikki toimii!
?>
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ä.