2017-07-26 1 views
0

Warum muss ich parent::initialize() auf Initialisierungsmethode von Controller verwenden, obwohl es ohne dies funktioniert?Warum Eltern verwenden :: initialisieren in CakePHP 3.x

mit: cakephp 3

Dank

+0

parent führt nur die übergeordnete Methode aus der Override-Methode aus. Sie sehen, dass Sie die 'initialize()' Methode überschreiben, aber es kann "stuff" in der Methode des Elternteils geben, was essentiell ist, also weil es jetzt nicht zugänglich ist (wegen der Überschreibung), benutzen Sie 'parent :: method()' um darauf zuzugreifen , und führen Sie den Code dort – ArtisticPhoenix

+0

sein wichtig zu beachten, dass manchmal die Reihenfolge, in der Sie die Eltern-Methode aufrufen kann zum Beispiel 'Ihr Code;' 'Eltern :: Methode();' OR 'Eltern :: Methode(); ' ' Ihr Code; ' Wenn es etwas im Elternteil gibt, dass' Ihr Code' davon abhängt, dass Sie Eltern zuerst anrufen müssen, scheint dies offensichtlich. Aber es ist einfach, es zu übersehen, weil die Code-Bits wahrscheinlich in 2 separaten Dateien existieren. – ArtisticPhoenix

Antwort

2

Dies sind PHP OOP Basics: http://php.net/manual/pl/keyword.parent.php

Sie können sich finden, Code zu schreiben, die in Basisklassen auf Variablen und Funktionen bezieht. Dies gilt insbesondere dann, wenn Ihre abgeleitete Klasse eine Verfeinerung oder Spezialisierung von Code in Ihrer Basisklasse ist.

Anstatt den literalen Namen der Basisklasse in Ihrem Code zu verwenden, sollten Sie den speziellen Namen parent verwenden, der sich auf den Namen Ihrer Basisklasse bezieht, wie in der extends-Deklaration Ihrer Klasse angegeben. Dadurch vermeiden Sie, den Namen Ihrer Basisklasse an mehreren Stellen zu verwenden. Sollte sich Ihr Vererbungsbaum während der Implementierung ändern, können Sie die Änderung leicht vornehmen, indem Sie einfach die extends-Deklaration Ihrer Klasse ändern.

class A { 
    function example() { 
     echo "I am A::example() and provide basic functionality.<br />\n"; 
    } 
} 

class B extends A { 
    function example() { 
     echo "I am B::example() and provide additional functionality.<br />\n"; 
     parent::example(); 
    } 
} 

$b = new B; 

// This will call B::example(), which will in turn call A::example(). 
$b->example(); 

Wenn Sie Bedarf bis zu Ihre Implementierung zu nennen. In einem Framework ist es jedoch meistens ratsam, übergeordnete Methoden beim Überschreiben von Methoden aufzurufen, um sicherzustellen, dass die Logik in der Kette aufgerufen wird. Lesen Sie das PHP-Handbuch, es enthält Beispiele.

+0

upvote Ihre Erklärung. Sehr klar dazu. –

+0

Es ist eigentlich nur ein Kopieren und Einfügen aus dem Link der Dokumentation. Auch das Beispiel wird von dort genommen. Die Leute lesen heutzutage keine Dokumente mehr. :( – burzum

Verwandte Themen