Für den Zugriff auf geschützte Methode von der Kind-Klasse in PHP

Kann ich mindestens zwei grundlegende Möglichkeiten, um den Zugriff auf eine geschützt Methode der Klasse von einer Kind-Klasse:

parent::myMethod();

$this->myMethod();

Wenn ich Sie nicht brauche, um es zu überschreiben, die in der Kind-Klasse, in dem Fall würde ich haben, dies zu tun:

function myMethod() {
   ...
   parent::myMethod();
   ...
}

welche ist die am meisten empfohlene Art und Weise, es zu nennen? Ich persönlich fühle mich wohler mit parent::myMethod() eher als $this->myMethod, weil der erste sofort sagt mir diese Methode geerbt wird. Aber ich bin mir nicht sicher, welchen Weg in Bezug auf performance und best practices.

EDIT:

Überprüfen, was im realen Fall meiner Frage. Es ist mit CodeIgniter, aber obwohl Sie sind nicht vertraut mit ihm, Sie werden wahrscheinlich bekommen Sie:

class Admin_Controller extends CI_Controller {

    protected function validate_form($validation) {
            $this->load->library('form_validation');
            //This will validate the form sent against the validation rules group specified in $validation
            if ($this->form_validation->run($validation) == false) {   
                    throw new Exception('There are errors in the form');
            }
    }

}

class Articles extends Admin_Controller {

    function save($id) {
            $this->validate_form(strtolower(get_class($this));
            //OR
            parent::validate_form(strtolower(get_class($this));
            //Other actions
            ....
    }

}

class Login extends Admin_Controller {

    function signIn() {
            $this->validate_form(strtolower(get_class($this));
            //OR
            parent::validate_form(strtolower(get_class($this));
            //Other actions
            ....
    }

}
  • Nur eine Frage des Geschmacks.
  • Du meinst, keiner von Ihnen werden als eine schlechte Praxis?
  • Technisch gesehen parent::myMethod() und $this->myMethod() sind zwei verschiedene Dinge und unterschiedliche Ergebnisse zurückgeben... der zweite bezieht sich auf die Kind-Klasse.
  • Was ist die ... Teil? Warum würden Sie benötigen, wenn Sie nicht überschreiben die übergeordnete Methode? Können Sie geben ein realistischeres Beispiel?
  • Murch: ja, Sie sind technisch anders, weil parent::myMethod() ist die Methode in der übergeordneten Klasse und dieser->myMethod() die geerbte Methode in der abgeleiteten Klasse. Aber, wenn diese Methode nicht überschrieben, könnte ich andere Ergebnisse erwarten?? Ignorieren Sie die '...' Teile, es ist ein Beispiel, das ich gemacht, im Falle ich brauchte, um das überschreiben der Methode, was nicht der Fall ist.
  • Aber, Sie werden überschreiben myMethod in deinem Beispiel, und rufen Sie die Eltern myMethod in Ihrem Kind myMethod. Versuchen Sie, ein besseres Beispiel, oder versuchen zu klären, Ihre Frage in gewisser Weise, dass es mehr materielle oder realistisch. Nur den Aufruf der übergeordneten Methode ohne Modifikation macht keinen Sinn.
  • Tatsächlich, die erste ist eine gute Praxis ... auf unnötige überschreiben-Methoden sind Sie einfach nur Ihren code, mehr "Komplex". Sie fügte nur eine weitere Methode, die überhaupt nichts macht. Und das bedeutet eine weitere operation zu tun, für das Programm. Wenn Sie schauen, um optimierten code, dies ist nicht eine gute Praxis.

InformationsquelleAutor Luis Martin | 2012-12-07
Schreibe einen Kommentar