Magická metoda toString v OOP v PHP
První magická metoda, kterou budeme
studovat, se jmenuje __toString. Je
volána při pokusu o převedení instance
třídy na řetězec. Pojďme si vysvětlit, co
to znamená. Předpokládejme, že máme danou tuto třídu
User:
<?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;
}
}
?>
Vytvořme objekt této třídy:
<?php
$user = new User('john', 25);
?>
A nyní zkusme vytvořit vytvořený objekt
pomocí echo:
<?php
$user = new User('john', 25);
echo $user;
?>
Pokus o výpis objektu pomocí echo
je převod na řetězec. V tomto
případě PHP vypíše chybu, protože objekty se tak snadno
na řetězec nepřevádějí.
Abychom odstranili chybu, musíme
explicitně říci PHP, co dělat při
pokusu o převedení objektu na řetězec. K
tomu slouží magická metoda
__toString.
Pokud v kódu naší třídy vytvoříme takovou metodu,
pak výsledek této metody (tedy to, co
vrátí přes return) bude řetězcovou
reprezentací objektu.
Předpokládejme, že chceme, aby se při pokusu o výpis
objektu pomocí echo, vypsalo jméno
uživatele. To znamená, že vytvoříme metodu __toString
a vrátíme v ní hodnotu vlastnosti name:
<?php
class User
{
private $name;
private $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
// Implementujeme uvedenou metodu:
public function __toString()
{
return $this->name;
}
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
}
?>
Ověřme:
<?php
$user = new User('john', 25);
echo $user; // vypíše 'john' - vše funguje!
?>
Vytvořte třídu User, ve které budou
vlastnosti name a surn.
Zařiďte, aby při
výpisu objektu pomocí echo na obrazovku
se vypsal řetězec se jménem a příjmením uživatele.