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.
InformationsquelleAutor ProgZi | 2014-06-28
Schreibe einen Kommentar