Dieser Artikel zeigt, wie man in PHP 7 anonyme Klassen deklariert und was man damit anstellen kann.
Eine anonyme Klasse wird gleichzeitig deklariert und instanziiert. Sie hat keinen Bezeichner, allerdings alle Eigenschaften einer normalen Klasse. Anonyme Klassen sind sinnvoll, wenn eine einzigartige und einmalige Aufgabe zu erfüllen ist, ohne gleich den Overhead einer ganzen Klasse zu erzeugen. Dazu gleich ein Beispiel:
$name = new class('Hans Mustermann') {
public function __construct(string $name)
{
echo $name;
}
};
Wie in dem Beispiel zu sehen, erfüllt eine anonyme Klasse alle Erfordernisse einer normalen Klasse, außer dass sie keinen Bezeichner trägt und nicht mehrfach genutzt wird.
Anonyme Klassen können andere Klassen erweitern und haben die gleiche Eltern-Kind Beziehungen wie normale, bezeichnete Klassen. Auch hierzu ein Beispiel:
class Basisklasse
{
protected $number;
public function __construct() {
echo 'Ich bin der Konstruktor der Basisklasse.";
}
public function getNumber() : float {
return $this->number;
}
}
$number = new class(5) extends Basisklasse {
public function __construct(float $number) {
parent::__construct();
$this->number = $number;
}
}
echo $number->getNumber();
Führt man den Beispielcode aus, so erhält man als Ausgabe
Ich bin der Konstruktor der Basisklasse.
5
In dem Beispiel wurde die Klasse Basisklasse erweitert, wie das in einer normalen Klasse geschieht. Ferner können public und protected Eigenschaften und Methoden innerhalb von anonymen Klassen angesprochen werden.
Anonyme Klassen können auch Interfaces implementieren. Auch dazu gleich ein Beispiel:
interface Infos
{
public function __construct(string $name, $string $address);
public function getName();
public function getAddress();
}
class Basisklasse
{
protected $number;
protected $name;
protected $address;
public function __construct()
{
echo 'Ich bin der Konstruktor der Basisklasse.';
}
public function getNumber() : float
{
return $this->number;
}
}
$info = new class('Hans Mustermann', 'Musterstraße 10, 12345 Musterstadt')
extends Basisklasse implements Info
{
public function __construct(string $name, string $address)
{
$this->name = $name;
$this->address = $address;
}
public function getName() : string
{
return $this->name;
}
public function getAddress() : string
{
return $this->address;
}
}
$info->getName() . ' ' . $info->getAddress();
Der vorhergehende Beispielcode gibt “Max Mustermann” und die Adresse aus.
Man kann anonyme Klassen auch innerhalb einer anderen Klasse verwenden, wie das folgende Beispiel zeigt:
class Math
{
public $number_one = 10;
public number_two = 20;
public function add() : float
{
return $this->number_one + $this->number_two;
}
public function multiply_sum()
{
return new class() extends Math
{
public function multiply(float $number_three) : float
{
return $this->add() * $number_three;
}
};
}
$math = new Math();
echo $math->multiply_sum()->multiply2);
Der Beispielcode liefert als Ergebnis 60. Zunächst wird die Methode multiply_sum() ausgeführt, welche als Rückgabewert eine anonyme Klasse verwendet. In dieser wird die Methode multiply() ausgeführt, die wiederum die Methode add() aus der Klasse Math ausführt und das Ergebnis mit dem Wert des Übergabeparameters – hier 2 – multipliziert.
Weitere Einzelheiten zu anonymen Klassen in PHP liefert die PHP Dokumentation.
Kommentare(2)
statt span tags sollten hier in den Beispielen wohl eher farbiger Programmcode gezeigt werden.
Ja, sorry. Ich habe noch nicht alle älteren Beiträge auf den Gutenberg-Editor umgestellt. Der hat mir so einiges verhunzt.
Danke für den Hinweis!