Traits in OOP in PHP
Wie Sie bereits wissen, kann in PHP nicht von mehreren Klassen gleichzeitig geerbt werden, nur von einer. Wir haben bereits eine Lösung für dieses Problem kennengelernt: anstatt Vererbung zu verwenden, Objekte einiger Klassen in anderen zu verwenden.
In PHP gibt es einen anderen Weg. Er besteht in der Verwendung von Traits. Ein Trait stellt eine Sammlung von Eigenschaften und Methoden dar, die in eine andere Klasse eingebunden werden können. Dabei werden die Eigenschaften und Methoden des Traits von der Klasse wahrgenommen, als wären es ihre eigenen.
Die Syntax eines Traits ist die gleiche wie bei einer Klasse,
mit der Ausnahme, dass der Trait-Name
mit dem Schlüsselwort trait deklariert werden muss.
Eine Instanz eines Traits kann nicht erstellt werden - Traits
sind nur für die Einbindung in andere
Klassen vorgesehen. Die Einbindung selbst erfolgt
mit dem Befehl use, nach dem
durch Leerzeichen getrennt der Name des einzubindenden
Traits angegeben wird. Dieser Befehl wird am Anfang der Klasse geschrieben.
Sehen wir uns die Anwendung von Traits an einem praktischen
Beispiel an. Angenommen, wir haben den folgenden Trait
Helper, der die privaten Eigenschaften
name und age sowie ihre Getter enthält:
<?php
trait Helper
{
private $name;
private $age;
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
}
?>
Angenommen, wir haben auch die folgende Klasse User,
in deren Konstruktor die Eigenschaften
name und age gesetzt werden:
<?php
class User
{
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Fügen wir nun Getter für die Eigenschaften
unserer Klasse User hinzu.
Schreiben wir sie aber nicht in der Klasse selbst,
sondern binden wir einfach den
Trait Helper ein, in dem diese Methoden
bereits implementiert sind:
<?php
class User
{
use Helper; // Trait einbinden
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Nach dem Einbinden des Traits erscheinen in unserer Klasse die Methoden und Eigenschaften dieses Traits. Dabei greifen wir auf sie zu, als wären es Methoden und Eigenschaften der Klasse selbst:
<?php
$user = new User('john', 30);
echo $user->getName(); // gibt 'john' aus
echo $user->getAge(); // gibt 30 aus
?>
Implementieren Sie die Klasse City mit den Eigenschaften
name, age, population
und Gettern für diese. Lassen Sie unsere Klasse
zur Verkürzung ihres Codes den bereits von uns
erstellten Trait Helper verwenden.