Dokumentation

Magische Methoden

Magische Methoden sind Methoden, die PHPs Standardverhalten überschreiben, wenn bestimmte Aktionen mit einem Objekt durchgeführt werden.

Überblick

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

__invoke()

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);
Mitglied in