PHP Überschreiben von Methoden Regeln
Gerade lese ich aus dem Buch:
"In PHP 5, mit Ausnahme von Konstruktoren, jede abgeleitete Klasse muss die gleiche Signatur, die beim überschreiben einer Methode"
Aus dem PHP manual in den Kommentaren:
"In den übergeordneten, den Methodennamen und die Argumente (arg) muss gleich sein.
Beispiel:
class P { public function getName(){} }
class C extends P{ public function getName(){} }
"
Also warum bin ich in der Lage, Sie zu ersetzen-Methode mit anderen Argumenten, und Ihre Menge? Ist das legal oder wird trigger-Fehler in der Zukunft oder ich bin einfach etwas fehlt?
PHP Version 5.5.11
class Pet {
protected $_name;
protected $_status = 'None';
protected $_petLocation = 'who knows';
//Want to replace this function
protected function playing($game = 'ball') {
$this->_status = $this->_type . ' is playing ' . $game;
return '<br>' . $this->_name . ' started to play a ' . $game;
}
public function getPetStatus() {
return '<br>Status: ' . $this->_status;
}
}
class Cat extends Pet {
function __construct() {
$this->_type = 'Cat';
echo 'Test: The ' . $this->_type . ' was born ';
}
//Replacing with this one
public function playing($gameType = 'chess', $location = 'backyard') {
$this->_status = 'playing ' . $gameType . ' in the ' . $location;
return '<br>' . $this->_type . ' started to play a ' . $gameType . ' in the ' . $location;
}
}
$cat = new Cat('Billy');
echo $cat->getPetStatus();
echo $cat->playing();
echo $cat->getPetStatus();
Dies erzeugt folgende Ausgabe:
Test: Die Katze wurde geboren
Status: Keine
Cat begann zu spielen Schach in den Hinterhof
Status: Schach spielen im Hinterhof
- Fehler-anzeigen und einstellen, Fehler-level auf E_ALL
- Nichts wirklich passiert ist, es zeigt keine Fehler.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gilt die Regel, dass eine Signatur der Methode muss kompatibel mit der Methode, die Sie überschreibt. Schauen wir uns die beiden Methoden in Ihrer Hierarchie:
Änderungen:
Sicht:
protected
->public
; Erhöhung der Sichtbarkeit kompatibel ist (das Gegenteil wird Fehler verursachen).Argumente: keine änderung (gleiche Anzahl der erforderlichen Argumente)
PHP nicht unterstützt überlastung so, wie Sie sind, es zu beschreiben. Die Parameter müssen nur vom gleichen Typ sein (z.B. integers, strings, arrays, usw.). Sie können zusätzliche Parameter, die speziell für die übergeordnete Methode, aber der erste Parameter MUSS entsprechen denen der übergeordneten Klasse.
Dies kann auch ein Duplikat PHP Funktion überladen.