Verständnis von PHP-Konstruktoren

巴扎黑
Freigeben: 2016-11-23 11:35:47
Original
1102 Leute haben es durchsucht

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 &#39;this is B()&#39;;
}
public function __construct(){
echo &#39;this is __construct()&#39;;
}
public function other(){
//do something
}
}
$b = new B();
?>
Nach dem Login kopieren

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 &#39;this is __construct()&#39;;
}
public function X(){
echo &#39;this is X()&#39;;
}
public function other(){
//do something
}
}
$x = new X();
?>
Nach dem Login kopieren

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 被当做是正常的方法使用
    }
}
?>
Nach dem Login kopieren

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 &#39;this is __construct() called Y()&#39;;
// do init
}
public function other(){
//do something
}
}
$y = new Y();
?>
Nach dem Login kopieren


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage