Vererbungsanalyse von Konstruktoren in PHP
KonstruktorVerwendung
HP 5 ermöglicht Entwicklern, eine Methode als Konstruktor in einer Klasse zu definieren. Klassen mit einem Konstruktor rufen diese Methode jedes Mal auf, wenn ein neues Objekt erstellt wird. Daher eignet sie sich sehr gut für einige Initialisierungsarbeiten vor der Verwendung des Objekts.
Hinweis: Wenn ein Konstruktor in einer Unterklasse definiert ist, wird der Konstruktor seiner übergeordneten Klasse nicht implizit aufgerufen. Um den Konstruktor der übergeordneten Klasse auszuführen, müssen Sie parent::construct() im Konstruktor der untergeordneten Klasse aufrufen. Wenn die Unterklasse keinen Konstruktor definiert, wird sie wie eine gewöhnliche Klassenmethode von der übergeordneten Klasse geerbt (sofern sie nicht als privat definiert ist).
Beispiel #1 Verwendung des neuen Standardkonstruktors
<?php class BaseClass { function construct() { print "In BaseClass constructorn"; } } class SubClass extends BaseClass { function construct() { parent::construct(); print "In SubClass constructorn"; } } class OtherSubClass extends BaseClass { // inherits BaseClass's constructor } // In BaseClass constructor $obj = new BaseClass(); // In BaseClass constructor // In SubClass constructor $obj = new SubClass(); // In BaseClass constructor $obj = new OtherSubClass(); ?>
Wenn PHP 5 aus Gründen der Abwärtskompatibilität die Funktion „construct()“ in der Klasse nicht finden kann und keine von der übergeordneten Klasse erbt, wird es es versuchen um einen Konstruktor im alten Stil zu finden, bei dem es sich um eine Funktion mit demselben Namen wie die Klasse handelt. Ein Kompatibilitätsproblem tritt also nur dann auf, wenn die Klasse bereits über eine Methode namens construction() verfügt, diese aber für andere Zwecke verwendet wird.
Im Gegensatz zu anderen Methoden generiert PHP keine E_STRICT-Fehlermeldung, wenn construction() von einer Methode mit anderen Parametern als der übergeordneten Klasse construction() überschrieben wird.
Seit PHP 5.3.3 ist im Namespace die Methode mit demselben Namen wie der Klassenname kein Konstruktor mehr. Diese Änderung wirkt sich nicht auf Klassen aus, die sich nicht im Namespace befinden.
Beispiel #2 Konstruktoren in Namespace-Klassen
<?php namespace Foo; class Bar { public function Bar() { // treated as constructor in PHP 5.3.0-5.3.2 // treated as regular method as of PHP 5.3.3 } } ?>
Weisen Sie beim Erstellen von Objekten Anfangswerte zu.
1. //创建一个人类 2. 3. 0class Person 4. 0{ 5. //下面是人的成员属性 6. var $name; //人的名子 7. var $sex; //人的性别 8. var $age; //人的年龄 9. //定义一个构造方法参数为姓名$name、性别$sex和年龄$age 10. function construct($name, $sex, $age) 11. { 12. //通过构造方法传进来的$name给成员属性$this->name赋初使值 13. $this->name=$name; 14. //通过构造方法传进来的$sex给成员属性$this->sex赋初使值 15. $this->sex=$sex; 16. //通过构造方法传进来的$age给成员属性$this->age赋初使值 17. $this->age=$age; 18. } 19. //这个人的说话方法 20. function say() 21. { 22. echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄是:".$this->age."<br>"; 23. } 24. } 25. //通过构造方法创建3个对象$p1、p2、$p3,分别传入三个不同的实参为姓名、性别和年龄 26. $p1=new Person("张三","男", 20); 27. $p2=new Person("李四","女", 30); 28. $p3=new Person("王五","男", 40); 29. //下面访问$p1对象中的说话方法 30. $p1->say(); 31. //下面访问$p2对象中的说话方法 32. $p2->say(); 33. //下面访问$p3对象中的说话方法 34. $p3->say();
Das Ausgabeergebnis ist:
Mein Name ist: Zhang San Geschlecht: Männlich Mein Alter ist: 20
Mein Name ist: Li Si Geschlecht: Weiblich Mein Alter ist: 30
Mein Name ist: Wang Wu Geschlecht: männlich Mein Alter ist: 40
Konstruktor-Vererbungsproblem
Sehen wir uns zunächst ein einfaches Beispiel an:
<?php class Fruit { public function construct($name) { echo '水果'.$name.'创建了'; } } class Apple extends Fruit { public function construct($name) { parent::construct($name); } } $apple = new Apple("苹果"); // 输出 水果苹果创建了 ?>
Die Konstruktorvererbung erspart das Umschreiben des Codes, nicht die Methodendeklaration. Das heißt, der in der übergeordneten Klasse deklarierte Konstruktor muss in der Tat erneut deklariert werden, was ebenfalls ein Umschreibungsprozess ist.
Die Konstruktorvererbung von PHP muss die folgenden Bedingungen erfüllen:
Wenn die übergeordnete Klasse eine Konstruktordeklaration hat, muss die Unterklasse auch eine Deklaration haben, andernfalls tritt ein Fehler auf.
Beim Ausführen des Konstruktors der übergeordneten Klasse muss das übergeordnete Schlüsselwort in der untergeordneten Klasse in Anführungszeichen gesetzt werden.
Wenn die übergeordnete Klasse einen Konstruktor hat und die untergeordnete Klasse keinen Konstruktor hat, wird der Konstruktor der übergeordneten Klasse tatsächlich ausgeführt, wenn die untergeordnete Klasse instanziiert wird. Angenommen, die Employee-Klasse hat den folgenden Konstruktor:
function construct($name){ $this->setName($name); } 然后实例化CEO类,获得其name成员: $ceo= new CEO("Gonn"); echo $ceo->getName(); 将得到如下结果: My name is Gonn
Wenn die Unterklasse jedoch auch einen Konstruktor hat, wird die Unterklasse unabhängig davon instanziiert, ob die übergeordnete Klasse vorhanden ist hat einen Konstruktor. Der eigene Konstruktor der Unterklasse wird ausgeführt. Nehmen wir beispielsweise an, dass die CEO-Klasse zusätzlich zu der Employee-Klasse, die den oben genannten Konstruktor enthält, auch den folgenden Konstruktor enthält:
function construct(){ echo "CEO object created!"; }
Instanziieren Sie die CEO-Klasse erneut und führen Sie getName() auf die gleiche Weise aus Mal erhalten Sie eine andere Ausgabe:
CEO-Objekt erstellt!
Mein Name ist Gonn
Wenn Sie auf parent::construct() stoßen, beginnt PHP, entlang des übergeordneten Elements nach oben zu suchen Klasse für eine geeignete Konstruktfunktion. Da es in Executive nicht gefunden wurde, haben wir weiter nach der Employee-Klasse gesucht und hier den passenden Konstruktor gefunden. Wenn PHP einen Konstruktor in der Employee-Klasse findet, führt es den Konstruktor aus. Wenn Sie sowohl den Employee-Konstruktor als auch den Executive-Konstruktor ausführen möchten, müssen Sie parent::construct() im Executive-Konstruktor aufrufen.
Außerdem können Sie eine andere Möglichkeit wählen, um auf den Konstruktor der übergeordneten Klasse zu verweisen. Nehmen wir beispielsweise an, dass beim Erstellen eines neuen CEO-Objekts sowohl der Employee- als auch der Executive-Konstruktor ausgeführt werden. Wie oben erwähnt, können diese Konstruktoren im Konstruktor des CEO wie folgt explizit referenziert werden:
function construct($name){ Employee::constrcut($name); Executive::construct(); echo "CEO object created!"; }
Konstruktorvererbung in verschiedenen PHP-Versionen
Referenzen in Konstruktoren
Der Konstruktorname von PHP 4.x ist derselbe wie der Klassenname.
Der Konstruktorname der Unterklasse ist derselbe wie der Unterklassenname (Unsinn).
Der Konstruktor der übergeordneten Klasse wird in der Unterklasse nicht automatisch ausgeführt.
Um den Konstruktor der übergeordneten Klasse in der Unterklasse auszuführen, müssen Sie eine Anweisung ähnlich der folgenden ausführen:
$this->[Konstruktorname der übergeordneten Klasse ()]
Für Beispiel:
class base1 { function base1() { echo 'this is base1 construct'; } } class class1 extends base1 { function class1() { $this->base1(); echo 'this is class1 construct'; } } $c1 = new class1;
PHP5.x-Version:
PHP5.0 und höhere Versionen haben die Funktionen von Klassen erheblich erweitert. Der Konstruktor einer Klasse trägt den einheitlichen Namen „construct()“.
Der Konstruktorname der Unterklasse lautet ebenfalls construction() (ebenfalls Unsinn).
Ob der Konstruktor der übergeordneten Klasse in der Unterklasse ausgeführt wird, gibt es zwei Situationen:
1. Wenn die Unterklasse den Konstruktor Konstrukt() nicht definiert, wird standardmäßig der Konstruktor der übergeordneten Klasse geerbt . Und es wird automatisch ausgeführt.
2. Wenn die Unterklasse den Konstruktor Konstrukt () definiert, überschreibt der Konstruktor der Unterklasse tatsächlich den Konstruktor der übergeordneten Klasse, da der Name des Konstruktors auch Konstrukt () ist. Zu diesem Zeitpunkt wird der Konstruktor der Unterklasse ausgeführt.
Wenn Sie zu diesem Zeitpunkt den Konstruktor der übergeordneten Klasse in der Unterklasse ausführen möchten, müssen Sie eine Anweisung ähnlich der folgenden ausführen:
parent::construct();
Zum Beispiel:
class base2 { function construct() { echo 'this is base2 construct'; } function destruct() { } } class class2 extends base2 { function construct() { parent::construct(); echo 'this is class2 construct'; } }
注意 parent::construct(); 语句不一定必须放在子类的构造函数中。放在子类的构造函数中仅仅保证了其在子类被实例化时自动执行。
PHP4.0 和 5.0 类构造函数的兼容问题:
在 PHP5.0 以上版本里,还兼容了 4.0 版本的构造函数的定义规则。如果同时定义了4.0的构造函数和 construct()函数,则construct() 函数优先。
为了使类代码同时兼容 PHP4.0 和 5.0,可以采取以下的方式:
class class3 { function construct() //for PHP5.0 { echo 'this is class2 construct'; } function class3() //for PHP4.0 { $this->construct(); } } $c3 = new class3;
php构造函数中的引用的内容。
<?php class Foo { function Foo($name) { global $globalref; $globalref[] = &$this; $this->setName($name); $this->echoName(); } function echoName() { echo "<br />",$this->name; } function setName($name) { $this->name = $name; } } ?>
下面来检查一下用拷贝运算符 = 创建的 $bar1 和用引用运算符 =& 创建的 $bar2 有没有区别...
copy to clipboard
显然没有区别,但实际上有一个非常重要的区别:$bar1 和 $globalref[0] 并没有被引用,它们不是同一个变量。这是因为“new”默认并不返回引用,而返回一个拷贝。
<?php $bar1 = new Foo('set in constructor'); $bar1->echoName(); $globalref[0]->echoName(); /* 输出: set in constructor set in constructor set in constructor */ $bar2 =& new Foo('set in constructor'); $bar2->echoName(); $globalref[1]->echoName(); /* 输出: set in constructor set in constructor set in constructor */ ?>
Das obige ist der detaillierte Inhalt vonVererbungsanalyse von Konstruktoren in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











PHP ist eine Skriptsprache, die auf der Serverseite weit verbreitet ist und insbesondere für die Webentwicklung geeignet ist. 1.PHP kann HTML einbetten, HTTP -Anforderungen und Antworten verarbeiten und eine Vielzahl von Datenbanken unterstützt. 2.PHP wird verwendet, um dynamische Webinhalte, Prozessformdaten, Zugriffsdatenbanken usw. mit starker Community -Unterstützung und Open -Source -Ressourcen zu generieren. 3. PHP ist eine interpretierte Sprache, und der Ausführungsprozess umfasst lexikalische Analyse, grammatikalische Analyse, Zusammenstellung und Ausführung. 4.PHP kann mit MySQL für erweiterte Anwendungen wie Benutzerregistrierungssysteme kombiniert werden. 5. Beim Debuggen von PHP können Sie Funktionen wie error_reporting () und var_dump () verwenden. 6. Optimieren Sie den PHP-Code, um Caching-Mechanismen zu verwenden, Datenbankabfragen zu optimieren und integrierte Funktionen zu verwenden. 7

PHP und Python haben jeweils ihre eigenen Vorteile und wählen nach den Projektanforderungen. 1.PHP ist für die Webentwicklung geeignet, insbesondere für die schnelle Entwicklung und Wartung von Websites. 2. Python eignet sich für Datenwissenschaft, maschinelles Lernen und künstliche Intelligenz mit prägnanter Syntax und für Anfänger.

PHP und Python haben jeweils ihre eigenen Vorteile, und die Wahl sollte auf Projektanforderungen beruhen. 1.PHP eignet sich für die Webentwicklung mit einfacher Syntax und hoher Ausführungseffizienz. 2. Python eignet sich für Datenwissenschaft und maschinelles Lernen mit präziser Syntax und reichhaltigen Bibliotheken.

PHP wird in E-Commerce, Content Management Systems und API-Entwicklung häufig verwendet. 1) E-Commerce: Wird für die Einkaufswagenfunktion und Zahlungsabwicklung verwendet. 2) Content -Management -System: Wird für die Erzeugung der dynamischen Inhalte und die Benutzerverwaltung verwendet. 3) API -Entwicklung: Wird für die erholsame API -Entwicklung und die API -Sicherheit verwendet. Durch Leistungsoptimierung und Best Practices werden die Effizienz und Wartbarkeit von PHP -Anwendungen verbessert.

In Phpoop bezieht sich Self :: auf die aktuelle Klasse, Eltern :: Bezieht sich auf die Elternklasse, static :: wird für die späte statische Bindung verwendet. 1.self :: wird für statische Methoden und konstante Aufrufe verwendet, unterstützt jedoch keine späte statische Bindung. 2.PARENT :: wird für Unterklassen verwendet, um übergeordnete Klassenmethoden aufzurufen, und auf private Methoden können nicht zugegriffen werden. 3.Static :: unterstützt die verspätete statische Bindung, geeignet für Vererbung und Polymorphismus, kann jedoch die Lesbarkeit des Codes beeinflussen.

PHP ist immer noch dynamisch und nimmt immer noch eine wichtige Position im Bereich der modernen Programmierung ein. 1) Einfachheit und leistungsstarke Unterstützung von PHP machen es in der Webentwicklung weit verbreitet. 2) Seine Flexibilität und Stabilität machen es ausstehend bei der Behandlung von Webformularen, Datenbankoperationen und Dateiverarbeitung; 3) PHP entwickelt sich ständig weiter und optimiert, geeignet für Anfänger und erfahrene Entwickler.

PHP eignet sich für die Webentwicklung, insbesondere für die schnelle Entwicklung und Verarbeitung dynamischer Inhalte, ist jedoch nicht gut in Anwendungen auf Datenwissenschaft und Unternehmensebene. Im Vergleich zu Python hat PHP mehr Vorteile in der Webentwicklung, ist aber nicht so gut wie Python im Bereich der Datenwissenschaft. Im Vergleich zu Java wird PHP in Anwendungen auf Unternehmensebene schlechter, ist jedoch flexibler in der Webentwicklung. Im Vergleich zu JavaScript ist PHP in der Back-End-Entwicklung präziser, ist jedoch in der Front-End-Entwicklung nicht so gut wie JavaScript.

PHP ist hauptsächlich prozedurale Programmierung, unterstützt aber auch die objektorientierte Programmierung (OOP). Python unterstützt eine Vielzahl von Paradigmen, einschließlich OOP, funktionaler und prozeduraler Programmierung. PHP ist für die Webentwicklung geeignet, und Python eignet sich für eine Vielzahl von Anwendungen wie Datenanalyse und maschinelles Lernen.
