php-resource

PHP Handbuch

Magische Methoden

Magische Methoden

Die Funktionen __construct, __destruct (siehe auch Konstruktoren und Destruktoren), __call, __get, __set, __isset, __unset (siehe auch Überladung), __sleep, __wakeup, __toString, __set_state, __clone und __autoload sind in PHP Klassen magisch. Man kann keine Funktionen gleichen Namens in einer seiner Klassen haben, wenn man nicht die magische Funktionalität, die sie mit sich bringen, haben will.

Achtung

PHP reserviert alle Funktionsnamen die mit __ beginnen als magsich. Es ist empfohlen keine Funktionsnamen mit __ in PHP zu benutzen, es sei denn man möchte dokumentierte magische Funktionalität verwenden.

__sleep und __wakeup

serialize() prüft, ob Ihre Klasse eine Funktion mit dem magischen Namen __sleep besitzt. Wenn dem so ist, wird die Funktion vor jeder Serialisierung ausgeführt. Sie kann das Objekt aufräumen und es wird von Ihr erwartet, dass Sie ein Array mit den Namen aller Variablen zurückliefert, die serialisiert werden sollen.

Die beabsichtigte Verwendung von __sleep ist es, alle Datenbankverbindungen zu schließen die das Objekt haben könnte, nicht gespeicherte Daten zu sichern oder ähnliche Aufräumarbeiten zu erledigen. Die Funktion ist ebenfalls nützlich, wenn Sie sehr große Objekte haben, welche nicht komplett gespeichert werden müssen.

Umgekehrt überprüft unserialize() die Anwesenheit einer Funktion mit dem magsichen Namen __wakeup. Falls anwesend kann diese Funktion alle Resourcen die das Objekt haben könnte wiederherstellen.

Der beabsichtigte Zweck von __wakeup ist es, alle Datenbankverbindungen wiederherzustellen die während der Serialisierung verloren gegangen sein könnten oder auch andere Aufgaben zur erneuten Initialisierung.

Beispiel 19-27. Sleep und wakeup Beispiel

<?php
class Connection {
    
protected $link;
    
private $server, $username, $password, $db;

    
public function __construct($server, $username, $password, $db)
    {
        
$this->server = $server;
        
$this->username = $username;
        
$this->password = $password;
        
$this->db = $db;
        
$this->connect();
    }

    
private function connect()
    {
        
$this->link = mysql_connect($this->server, $this->username, $this->password);
        
mysql_select_db($this->db, $this->link);
    }

    
public function __sleep()
    {
        
mysql_close($this->link);
    }

    
public function __wakeup()
    {
        
$this->connect();
    }
}
?>

__toString

Die __toString Methode erlaubt einer Klasse zu entscheiden wie sie reagieren will, wenn Sie in eine Zeichenkette umgewandelt wird.

Beispiel 19-28. Einfaches Beispiel

<?php
// Deklariere eine einfache Klasse
class TestClass
{
    
public $foo;

    
public function __construct($foo) {
        
$this->foo = $foo;
    }

    
public function __toString() {
        return
$this->foo;
    }
}

$class = new TestClass('Hallo');
echo
$class;
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Hallo

Es muss angemerkt werden, dass die __toString Methode in Versionen vor PHP 5.2.0 nur in direkter Kombination mit echo() oder print() aufgerufen wurde.

__set_state

Dieses statische Methode wird seit PHP 5.1.0 für Klassen aufgerufen, die mittels var_export() exportiert werden.

Der einzige Parameter dieser Methode ist ein Array, welches aus exportierten Eigenschaften der Form array('Eigenschaft' => Wert, ...) besteht.



Anmerkungen zum PHP Handbuch
Neue Anmerkung schreiben
 

webhosting und Server



 

Neuzugänge PHP MySQL Tutorials

Joomla! Starterhilfe

Dieses Tutorial begleitet Sie bei dem Einstieg in die Welt von dem CMS Joomla!.

17.01.2012 werninator | Kategorie: MySQL
Objektorientiertes Programmieren

Dieses Tutorial beschreibt sehr gut die Wirkunsweise von objektorientiertes Programmieren. Also bestens geeignet um das objektorientierte Programmieren zu verstehen.

07.12.2010 phpsven | Kategorie: PHP
Tutorials zu Facebook Anwendungen mit PHP

In mehreren Tutorials wird der Zugriff auf Facebook Daten mittels Graph API, FQL und REST API erklärt. Alle Codebeispiele liegen zum Ausprobieren in einem SVN, bzw. github Repository bereit.

06.12.2010 abouttheweb | Kategorie: PHP