kann den Konstruktor nicht als geschützt oder privat definieren! Warum?

8
%Vor%

PHP hört einfach auf, den Code zu interpretieren, sobald er die Zeile

erreicht %Vor%

und gibt alles vorher und nichts aus, was danach an den Browser gesendet worden wäre.

Und sobald ich diese Zeile herausbringe, ändere sie in

%Vor%

alles funktioniert gut!?

Ich verstehe das nicht.

Irgendwelche Ideen?

    
Raffael 17.01.2011, 10:35
quelle

3 Antworten

12

Ich habe gerade eine einfache Testdatei erstellt, um zu bestätigen, ob dies auch auf meinem Rechner passiert, und ich glaube, ich habe die Antwort gefunden. Nimm den folgenden Code:

%Vor%

Beim Versuch, diesen Code auszuführen, erhalte ich einen fatalen Fehler: "PHP Fatal error: Zugriff auf Bar :: __ construct () muss öffentlich (wie in Klasse Foo) in /home/berry/foo.php on line sein 12. " Das bedeutet, dass Sie die Zugriffsebene in einer Kindklasse nicht ändern können, wenn der Elternteil bereits die Zugriffsebene definiert hat, was sehr sinnvoll ist: PHP würde nicht wissen, welcher Konstruktor aufgerufen werden soll, denke ich.

Als Nebenbemerkung: Wenn Sie sich Ihren Code ansehen, erweitert B A, und A verwendet B. Warum genau ist das so, es scheint mir eine seltsame Konstruktion zu sein? Ich vermute, dass Sie eigentlich Zusammensetzung, nicht Vererbung wollen.

    
Berry Langerak 17.01.2011, 10:41
quelle
6

Sie können einen Konstruktor als geschützt oder privat definieren. Dieser Code kompiliert läuft gut, da OOP für PHP / 5 neu geschrieben wurde :

%Vor%

Natürlich verhindern private Konstruktoren, dass Sie eine Instanz mit dem new Schlüsselwort erstellen, aber PHP löst einen schwerwiegenden Fehler aus (es hört nicht einfach auf zu laufen):

%Vor%     
Álvaro González 17.01.2011 10:47
quelle
1

Sie können benutzerdefinierte statische Initiatoren erstellen:

%Vor%     
ecabuk 08.05.2016 13:36
quelle

Tags und Links