Metoda magică toString în OOP în PHP
Prima metodă magică pe care o vom
studia se numește __toString. Aceasta
este apelată la încercarea de a converti o instanță
de clasă în șir de caractere. Să înțelegem ce
înseamnă acest lucru. Să presupunem că avem următoarea clasă
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;
}
}
?>
Să creăm un obiect al acestei clase:
<?php
$user = new User('john', 25);
?>
Acum să încercăm să afișăm obiectul creat
prin echo:
<?php
$user = new User('john', 25);
echo $user;
?>
Încercarea de a afișa un obiect prin echo
reprezintă conversia la șir de caractere. În acest
caz PHP va afișa o eroare, deoarece simplu
obiectele nu pot fi convertite în șir de caractere.
Pentru a elimina eroarea, trebuie
să îi spunem explicit PHP-ului ce să facă atunci când
încercăm să convertim un obiect în șir de caractere. Pentru
aceasta există metoda magică
__toString.
Dacă în codul clasei noastre creăm o astfel de metodă,
atunci rezultatul acestei metode (adică ceea ce
ea returnează prin return) va fi reprezentarea
în șir de caractere a obiectului.
Să presupunem că vrem ca atunci când încercăm să afișăm
obiectul prin echo, să se afișeze numele
utilizatorului. Așadar, vom face metoda __toString
și vom returna în ea valoarea proprietății name:
<?php
class User
{
private $name;
private $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
// Implementăm metoda specificată:
public function __toString()
{
return $this->name;
}
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
}
?>
Să verificăm:
<?php
$user = new User('john', 25);
echo $user; // va afișa 'john' - totul funcționează!
?>
Creați o clasă User, în care vor fi
proprietățile name și surn.
Faceți astfel încât atunci când
afișați obiectul prin echo pe ecran
să se afișeze un șir cu numele și prenumele utilizatorului.