PHP4 verfügt bereits über eine Überladungssyntax zum Erstellen von Zuordnungen zu externen Objektmodellen, genau wie Java und COM. PHP5 ermöglicht eine leistungsstarke objektorientierte Überladung, die es Programmierern ermöglicht, benutzerdefinierte Verhaltensweisen für den Zugriff auf Eigenschaften und Aufrufmethoden zu erstellen
. __set und __call. Wenn die Zend-Engine versucht, auf ein Mitglied zuzugreifen und es nicht finden kann, ruft PHP diese Methoden auf.
Im Beispiel in Abbildung 1 ersetzen __get und __set alle Zugriffe auf ein Array von Attributvariablen Implementieren Sie jede gewünschte Filterart. Das Skript kann beispielsweise das Festlegen von Attributwerten deaktivieren, mit einem bestimmten Präfix beginnen oder einen bestimmten Werttyp einschließen.
Die Methode __call veranschaulicht, wie Sie eine undefinierte Methode aufrufen können , der Methodenname und die von der Methode empfangenen Parameter werden an die __call-Methode übergeben, und PHP übergibt den Wert von __call an die undefinierte Methode zurück.
Überladung auf Benutzerebene
<?php
Klasse Overloader
{
private $properties = array();
function __get($property_name)
{
if(isset($this->properties[$property_name]))
{
return($this->properties[$property_name]);
}
anders
{
return(NULL);
}
}
Funktion __set($property_name, $value)
{
$this->properties[$property_name] = $value;
}
Funktion __call($function_name, $args)
{
print("Aufruf von $function_name()n");
print("Argumente: ");
print_r($args);
return(TRUE);
}
}
$o = new Overloader();
//invoke __set() weist einer nicht vorhandenen Attributvariablen einen Wert zu und aktiviert __set()
$o->dynaProp = "Dynamic Content";
//invoke __get() activate __get()
print($o->dynaProp . "n");
//invoke __call() activate __call()
$o->dynaMethod("Leon", "Zeev");
?>
Automatisches Laden von Klassen
Wenn Sie versuchen, eine undefinierte Klasse zu verwenden, meldet PHP einen schwerwiegenden Fehler. Die Lösung besteht darin, eine Klasse hinzuzufügen. Schließlich wissen Sie, welche Klasse Sie verwenden müssen Bietet eine automatische Ladefunktion für Klassen, die Programmierzeit sparen kann. Wenn Sie versuchen, eine Klasse zu verwenden, die PHP nicht organisiert hat, sucht es nach einer globalen Funktion __autoload. Wenn diese Funktion vorhanden ist, ruft PHP sie mit einem Parameter auf Parameter ist der Name der Klasse.
Abbildung 2 zeigt, wie __autoload verwendet wird. Es wird davon ausgegangen, dass jede Datei im aktuellen Verzeichnis einer Klasse entspricht. Wenn das Skript versucht, eine Instanz der Klasse User zu generieren, führt PHP Script Assumptions aus Die Benutzerklasse ist in class_User.php definiert. Unabhängig davon, ob der Aufruf in Groß- oder Kleinbuchstaben erfolgt, gibt PHP den
automatisch geladenen
Klassennamen
zurück
//Autoload-Funktion definieren
Funktion __autoload($class)
{
include("class_" . ucfirst($class). ".php");
}
//Eine Klasse verwenden, die automatisch geladen werden muss
$u = neuer Benutzer;
$u->name = "Leon";
$u->printName();
?>