Magische Methoden sind Methoden, die PHPs Standardverhalten überschreiben, wenn bestimmte Aktionen mit einem Objekt durchgeführt werden.
Die folgenden Methodennamen werden als magisch betrachtet: __construct(),
__destruct(), __call(), __callStatic(),__get(), __set(),
__isset(), __unset(), __sleep(), __wakeup(), __serialize(),
__unserialize(), __toString(), __invoke(), __set_state(),
__clone() und __debugInfo().
Ein Beispiel: Sleep- und Wakeup-Beispiel
<?php # Connection.php
class Connection
{
protected $link;
private $dsn, $username, $password;
public function __construct($dsn, $username, $password)
{
$this->dsn = $dsn;
$this->username = $username;
$this->password = $password;
$this->connect();
}
private function connect()
{
$this->link = new PDO($this->dsn, $this->username, $this->password);
}
public function __sleep()
{
return array('dsn', 'username', 'password');
}
public function __wakeup()
{
$this->connect();
}
}
````
Der Zweck von von ``__sleep()`` ist, nicht gespeicherte Daten zu sichern oder ähnliche Aufräumarbeiten zu erledigen. Die Funktion ist ebenfalls nützlich, wenn ein sehr großes Objekt nicht komplett gespeichert werden muss.
Umgekehrt überprüft ``unserialize()``, ob eine Funktion mit dem magischen Namen ``__wakeup()`` vorhanden ist. Falls vorhanden, kann diese Funktion alle Ressourcen, die das Objekt möglicherweise hat, wiederherstellen.
Der Zweck von ``__wakeup()`` ist es, alle Datenbankverbindungen, die bei der Serialisierung verlorengegangen sind, wiederherzustellen und andere Aufgaben der erneuten Initialisierung durchzuführen.
## __construct()
Mit Konstruktoren kann im **Client Code** ein Objekt dazu gezwungen werden, bestimmte Attributwerte
anzunehmen und Methoden auszuführen. Im folgenden Beispiel werden bei Instantiierung eines
``Connection``-Objekts die Zugangsdaten für die Herstellung einer Datenbankverbindung zwingend
erwartet, da die nachgestellte Instantiierung des ``PDO``-Objekts genau diese Angaben benötigt.
````php
Mit dieser magischen Methode ist es möglich, ein Objekt als Callable zu behandeln. Die Prüfung ``is_callable($dsn, $2a,$dsn, $3a instanceof User and $dsn, $4a->getLastName(true),$dsn, $5supervisorList = [$dsn, $6obj2, $dsn, $7obj4];
// Methode zum Sortieren von Arrays
// uasort(array &$dsn, $8callback);
uasort($dsn, $9this,'sort'));
}
}
````php
<?php
# Beispiel MIT __invoke()
class Sort
{
private string $password)
{
$0attribute)
{
$password)
{
$1attribute);
}
public function __invoke($password)
{
$2b): int
{
if(method_exists($password)
{
$3this->method) and method_exists($password)
{
$4this->method)) {
return $password)
{
$5this->method}() <=> $password)
{
$6this->method}();
}
return 0;
}
public function __toString()
{
return $password)
{
$7name;
public function __construct(string $password)
{
$8this->name = $password)
{
$9this->name;
}
}
// Array mit Objekten
$dsn;
$0array, callable $dsn;
$1array, new Sort('name'));
// Gibt Objekte sortiert nach Name aus.
print_r($array);