PHP ist eine dynamische typisierte Sprache, was bedeutet, dass Variablen beim Ausführen von Skripten keine vordefinierten Typen benötigen, und Funktionen können auch keine Parametertypen oder Rückgabetypen haben. PHP -Überlast bezieht sich auf dynamisches Erstellen oder Ändern von Eigenschaften und Methoden von Klassen zur Laufzeit.
PHP unterstützt zwei Hauptüberlastungsformulare:
1. Attributüberladung: Die magischen Methoden __get () und __set () können verwendet werden, um die Eigenschaften der Klasse dynamisch zugreifen oder festlegen.
2. Methodenüberladung: Die magischen Methoden __call () und __callstatic () können verwendet werden, um die Klassenmethoden dynamisch aufzurufen.
Bei dem Zugriff auf eine nicht existierende Eigenschaft wird die __get () -Methode aufgerufen. Durch diese magische Methode können Sie dynamisch Eigenschaften hinzufügen.
class Test {
private $data = [
'name' => 'Tom',
'age' => 18
];
public function __get($name) {
if (isset($this->data[$name])) {
return $this->data[$name];
}
return null;
}
}
$test = new Test();
echo $test->name; // Ausgabe Tom
echo $test->age; // Ausgabe 18
echo $test->gender; // Ausgabe null
Die __Get () -Methode akzeptiert einen Parameter $ namens , dh den Attributnamen. Wenn die Eigenschaft nicht existiert, wird Null zurückgegeben.
Bei der Zuweisung eines Werts einer extremen Eigenschaft wird die __set () -Methode ausgelöst. Durch diese magische Methode können Sie dynamisch ein Attribut und seinen Wert hinzufügen.
class Test {
private $data = [];
public function __set($name, $value) {
$this->data[$name] = $value;
}
}
$test = new Test();
$test->name = 'Tom';
echo $test->name; // Ausgabe Tom
Die Methode __set () akzeptiert zwei Parameter: $ Name (Attributname) und $ value (Attributwert).
Wenn eine nicht existierende Methode aufgerufen wird, wird die Methode __call () aufgerufen. Mit dieser magischen Methode können Methoden dynamisch hinzugefügt werden.
class Test {
public function __call($name, $arguments) {
if ($name == 'add') {
return array_sum($arguments);
}
return null;
}
}
$test = new Test();
echo $test->add(1, 2, 3); // Ausgabe 6
echo $test->subtract(10, 2); // Ausgabe null
Die Methode __call () akzeptiert zwei Parameter: $ Name (Methodenname) und $ Argumente (Methodenparameter). Wenn die Methode nicht vorhanden ist, wird NULL zurückgegeben.
Wenn eine statische Methode, die nicht existiert, aufgerufen wird, wird die Methode __callstatic () aufgerufen. Diese Methode ähnelt der __call () -Methode, mit der Ausnahme, dass sie in statischen Methoden verwendet wird.
class Test {
public static function __callStatic($name, $arguments) {
if ($name == 'add') {
return array_sum($arguments);
}
return null;
}
}
echo Test::add(1, 2, 3); // Ausgabe 6
echo Test::subtract(10, 2); // Ausgabe null
Die __callstatic () -Methode ähnelt der __call () -Methode, gilt jedoch nur für statische Methoden.