Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erklärung des Konstruktors in PHP7

Detaillierte Erklärung des Konstruktors in PHP7

黄舟
黄舟Original
2017-07-02 09:51:194016Durchsuche

Bei der Entwicklung mit php7 bin ich auf Folgendes gestoßen:

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; index has a deprecated constructor

Diese Eingabeaufforderung ist normal und scheint leicht zu verstehen, und sie ist in vielen Artikeln enthalten, die PHP7 vorstellen. Wir haben alle erwähnt, dass diese Eingabeaufforderung ausgelöst wird, wenn die -Funktion mit demselben Namen wie die Klasse in PHP7 als -Konstruktor verwendet wird. Es wird empfohlen, ein Konstrukt wie ecshop zu verwenden . Es gibt viele Situationen im Code, in denen Funktionen mit demselben Namen wie die Klasse als Konstruktoren verwendet werden.

Aber ich habe festgestellt, dass der Controller von thinkphp immer noch über die Indexmethode im Index-Controller verfügt, und ich habe nicht festgestellt, dass diese Eingabeaufforderung ausgelöst wird, wenn ich sie verwende.

Also habe ich den Code durchgesehen, aber laut den Informationen und Tests habe ich festgestellt, dass es mehrere Situationen gibt:

1 Wenn es sowohl ein Konstrukt (nicht übergeordnete Klasse) als auch ein Funktion mit demselben Namen wie der Klassenname in einer Klasse, dann ist das Konstrukt ein Konstruktor und die Funktion mit demselben Namen wird als gewöhnliche Funktion behandelt

2 Wenn die übergeordnete Klasse einer Unterklasse ein Konstrukt hat (auch wenn es öffentlich ist), die Unterklasse jedoch nicht, und die Unterklasse hat eine Funktion mit demselben Namen, die ein Konstruktor ist. Wenn Sie get_class_methods($this); verwenden, um die Methode der Klasse abzurufen, werden Sie feststellen, dass es tatsächlich eine Konstruktmethode gibt:

Seit PHP 5.3.3 wird ab sofort im

Namespace

die Methode mit dem gleichen Namen wie der Klassenname nicht mehr als Konstruktor verwendet. Diese Änderung wirkt sich nicht auf Klassen aus, die sich nicht im Namespace befinden. Beim Testen einiger Vermutungen werden Namespaces im Allgemeinen nicht verwendet. Wenn man sich den Quellcode von thinkphp ansieht, gibt es nirgendwo eine Sonderbehandlung und er bleibt immer im ersten beiden Situationen, sehr verwirrt.

Glücklicherweise habe ich die dritte Situation im offiziellen PHP-Handbuch gefunden und endlich verstanden, warum es in thinkphp keine solche Eingabeaufforderung gibt, weil thinkphp Namespaces verwendet.

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des Konstruktors in PHP7. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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