Heim >Backend-Entwicklung >PHP-Tutorial >Verständnis von PHP-Konstruktoren
Mir sind bei der Arbeit an dem Projekt einige Fehler aufgefallen. Letztlich war es die Konstruktionsmethode von PHP, die Probleme verursacht hat:
Ab PHP5 können Sie die Konstruktionsmethode __construct in der Klasse deklarieren . Wenn das Objekt instanziiert wird, wird diese Methode aufgerufen.
Hinweis:
1. Wenn in der geerbten Unterklasse keine Konstruktormethode, in der übergeordneten Klasse jedoch eine Konstruktormethode vorhanden ist, wird beim Instanziieren der Unterklasse implizit die Konstruktormethode der übergeordneten Klasse aufgerufen.
2. Wenn die Unterklasse einen Konstruktor hat und die übergeordnete Klasse auch einen Konstruktor hat, muss die Unterklasse explizit parent::__construct() aufrufen, um auf den Konstruktor der übergeordneten Klasse zuzugreifen.
Wenn die Methode __construct() nicht in der PHP5-Klasse gefunden wird, sucht sie aus Gründen der Abwärtskompatibilität nach einem Konstruktor mit demselben Methodennamen wie der Klassenname, wenn jedoch zwei Konstruktoren gleichzeitig verwendet werden , ist es möglich, dass eine Fehlermeldung auf E_STRICT-Ebene auftritt:
(Der folgende Code ist meine Webumgebung: win32 php5.3.8 apache2.2 test)
<?php class B{ //构造器 public function B(){ echo 'this is B()'; } public function __construct(){ echo 'this is __construct()'; } public function other(){ //do something } } $b = new B(); ?>
Ergebnis: Strenge Standards: Neudefinition bereits definiert Konstruktor für Klasse B in D:xampphtdocstest3Class.php in Zeile 8
das ist __construct()
Aber nur das Ändern der Position der Methode ist anders:
<?php class X{ //构造器 public function __construct(){ echo 'this is __construct()'; } public function X(){ echo 'this is X()'; } public function other(){ //do something } } $x = new X(); ?>
Tatsächlich Ab PHP5.3.3 wird die Methode mit demselben Namen wie die Klasse nicht mehr als Konstruktor der Klasse verwendet. Dasselbe gilt für die Namespace-Klasse. Wenn Sie PHP5.3.3 oder höher verwenden, können Sie die nicht mehr verwenden Methode mit demselben Namen wie die Klasse als Konstruktor:
<?php namespace Foo; class Bar { public function Bar() { // PHP 5.3.0-5.3.2 是构造方法 // PHP 5.3.3 被当做是正常的方法使用 } } ?>
Wenn Sie in PHP5.3.3 oder höher zwei Konstruktoren gleichzeitig verwenden müssen, können Sie dies tun:
<?php class Y{ //构造器 public function __construct(){ self::Y(); } public function Y(){ echo 'this is __construct() called Y()'; // do init } public function other(){ //do something } } $y = new Y(); ?>