suchen
HeimBackend-EntwicklungPHP-TutorialWas sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an?

Was sind die magischen Methoden von PHP? Zu den magischen Methoden von PHP gehören: 1. \ _ \ _ Konstrukt, verwendet, um Objekte zu initialisieren; 2. \ _ \ _ Destruct, verwendet zur Reinigung von Ressourcen; 3. \ _ \ _ Call, behandeln Sie nicht existierende Methodenaufrufe; 4. \ _ \ _ GET, Implementieren Sie den dynamischen Attributzugriff; 5. \ _ \ _ Setzen Sie dynamische Attributeinstellungen. Diese Methoden werden in bestimmten Situationen automatisch aufgerufen, wodurch die Code -Flexibilität und -Effizienz verbessert werden.

Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an?

Einführung

In der Welt des PHP sind magische Methoden wie Superkräfte im Code versteckt, wodurch Ihre Klassen flexibler und leistungsfähiger werden können. Heute werden wir über diese mysteriösen magischen Methoden wie __construct , __destruct , __call , __get , __set usw. sprechen. Durch diesen Artikel lernen Sie, wie Sie diese Methoden verwenden, um Ihre PHP-Programmierfähigkeiten zu verbessern, einige häufige Probleme zu lösen und sie in realen Projekten anzuwenden.

Überprüfung des Grundwissens

In PHP sind magische Methoden eine Reihe spezieller Methoden, die mit doppelten Unterstrichen beginnen und enden, die in bestimmten Situationen automatisch aufgerufen werden. Die Namen und Funktionen dieser Methoden sind sehr intuitiv. Beispielsweise wird __construct verwendet, um Objekte zu initialisieren, und __destruct wird verwendet, um einige Operationen durchzuführen, wenn das Objekt zerstört wird.

Die Kraft dieser Methoden besteht darin, dass sie es uns ermöglichen, eine komplexe Logik ohne explizite Anrufe zu implementieren. Zum Beispiel ermöglichen __get und __set uns, einige benutzerdefinierte Vorgänge beim Zugriff auf oder beim Einstellen von nicht existierenden Eigenschaften auszuführen.

Kernkonzept oder Funktionsanalyse

Definition und Funktion magischer Methoden

Magische Methoden sind einige vordefinierte Methoden in PHP, die in bestimmten Situationen automatisch aufgerufen werden. Schauen wir uns einige gemeinsame magische Methoden und ihre Funktionen an:

  • __construct : Der Konstruktor, der automatisch aufgerufen wird, wenn ein Objekt erstellt wird, wird verwendet, um das Objekt zu initialisieren.
  • __destruct : Destructor, automatisch aufgerufen, wenn ein Objekt zerstört wird, wird zur Bereinigung von Ressourcen verwendet.
  • __call : Wenn eine Methode, die nicht existiert, aufgerufen wird, kann dynamische Methodenaufrufe implementiert werden.
  • __get : Wenn auf nicht existierende Eigenschaften zugegriffen werden, kann dynamischer Zugriff auf Eigenschaften erreicht werden.
  • __set : Wenn nicht existierende Eigenschaften festgelegt werden, können dynamische Eigenschafteneinstellungen implementiert werden.

Wie es funktioniert

Das Arbeitsprinzip der magischen Methoden ist sehr einfach: Wenn PHP auf eine bestimmte Situation stößt, wird automatisch die entsprechende magische Methode gefunden und aufgerufen. Wenn Sie beispielsweise versuchen, auf eine Eigenschaft zuzugreifen, die nicht existiert, sucht PHP nach der __get -Methode und wenn sie existiert, wird sie aufgerufen.

Schauen wir uns ein einfaches Beispiel an:

 Klasse MagicClass {
    private $ data = [];

    öffentliche Funktion __get ($ name) {
        Echo "Geting Property: $ name \ n";
        $ this-> Daten zurückgeben [$ name] ?? Null;
    }

    öffentliche Funktion __set ($ name, $ value) {
        echo "Einstellung von Eigenschaften: $ name zu $ ​​value \ n";
        $ this-> Daten [$ name] = $ value;
    }
}

$ obj = new MagicClass ();
$ obj-> name = 'John'; // Ausgabe: Einstellung Eigenschaft: Name zu John
echo $ obj-> name; // Ausgabe: Eigenschaft

In diesem Beispiel definieren wir eine MagicClass -Klasse, die __get und __set -Methoden verwendet, um den Zugriff und die Einstellungen für den dynamischen Eigentum zu implementieren. PHP fordert diese Methoden automatisch auf, wenn wir versuchen, auf Eigenschaften zuzugreifen oder zu setzen, die nicht existieren.

Beispiel für die Nutzung

Grundnutzung

Schauen wir uns einige grundlegende Verwendungen von magischen Methoden an:

 Klasse BasicMagic {
    Öffentliche Funktion __construct () {
        echo "Objekt erstellt \ n";
    }

    öffentliche Funktion __Destruct () {
        Echo "Objekt zerstört \ n";
    }

    Öffentliche Funktion __call ($ name, $ argumente) {
        Echo "Anrufmethode: $ Name mit Argumenten:". implode (',', $ argumente). "\N";
    }
}

$ obj = new BasicMagic (); // Ausgabe: Objekt Erstellt
$ obj-> nicht existentMethod ('arg1', 'arg2'); // Ausgabe: Aufrufmethode: Nicht existentMethod mit Argumenten: arg1, arg2
unversehrt ($ obj); // Ausgabe: Objekt zerstört

In diesem Beispiel verwenden wir __construct und __destruct , um einige Informationen bei der Erstellung und Zerstörung von Objekten auszugeben und __call zu verwenden, um nicht existierende Methodenaufrufe zu verarbeiten.

Erweiterte Verwendung

Die wahre Kraft der magischen Methoden besteht darin, dass sie verwendet werden können, um eine komplexe Logik zu implementieren. Zum Beispiel können wir __call verwenden, um ein einfaches ORM -System (Object Relational Mapping) zu implementieren:

 Klasse orm {
    privat $ table;

    Öffentliche Funktion __construct ($ table) {
        $ this-> table = $ table;
    }

    Öffentliche Funktion __call ($ name, $ argumente) {
        if (strpos ($ name, 'findBy') === 0) {
            $ field = lcfirst (substr ($ name, 6));
            $ sql = "Auswählen * von {$ this-> table} Wo $ field =?";
            // Hier können Sie die SQL -Abfrage ausführen und das Ergebnis "Ausführen von SQL: $ SQL mit Argument: {$ argumente [0]}" zurückgeben;
        }
        Neue badMethodcallexception werfen ("Methode $ name existiert nicht");
    }
}

$ orm = new Orm ('Benutzer');
echo $ orm-> findById (1); // Ausgabe: Ausführung von SQL: Wählen Sie * von Benutzern aus, wobei ID =? mit Argument: 1
echo $ orm-> findByName ('John'); // Ausgabe: Ausführung von SQL: Wählen Sie * von Benutzern aus, wo name =? mit Argument: John

In diesem Beispiel verwenden wir die __call -Methode, um ein einfaches ORM -System zu implementieren. Wenn die findByXxx -Methode aufgerufen wird, generiert sie automatisch die entsprechende SQL -Abfrage.

Häufige Fehler und Debugging -Tipps

Bei Verwendung magischer Methoden können Sie auf einige häufige Probleme stoßen, wie z. B.:

  • Vergessen, die magische Methode zu definieren: Wenn die entsprechende magische Methode nicht definiert ist, wirft PHP einen Fehler auf.
  • Namensfehler magischer Methoden: Die Benennung magischer Methoden muss streng den PHP -Spezifikationen entsprechen, sonst wird sie nicht aufgerufen.
  • Leistungsprobleme: Überbeanspruchte magische Methoden können Leistungsprobleme verursachen, da sie jedes Mal ausgeführt werden, wenn sie aufgerufen werden.

Zu den Methoden zum Debuggen dieser Probleme gehören:

  • Verwenden Sie die Funktion debug_backtrace , um den Anrufstack anzuzeigen und herauszufinden, was das Problem ist.
  • Überprüfen Sie sorgfältig die Benennung und Definition magischer Methoden, um sicherzustellen, dass sie den PHP -Spezifikationen einhalten.
  • Verwenden Sie die Tools für Leistungsanalyse, um die Aufruffrequenz- und Ausführungszeit von magischen Methoden zu erkennen und den Code zu optimieren.

Leistungsoptimierung und Best Practices

Es gibt einige Leistungsoptimierungen und Best Practices, die bei der Verwendung magischer Methoden feststellen müssen:

  • Vermeiden Sie die Überbeanspruchung magischer Methoden: Obwohl magische Methoden leistungsstark sind, kann der Code zu Verständnis und Aufrechterhaltung von Überbeanspruchung erschweren.
  • Verwenden Sie Cache: Wenn das Ausführungsergebnis der Magic -Methode festgelegt ist, sollten Sie Cache verwenden, um die Leistung zu verbessern.
  • Lesbarkeit der Code erhalten: Obwohl magische Methoden eine komplexe Logik implementieren können, müssen sie auch die Lesbarkeit und Wartbarkeit des Codes sicherstellen.

Wenn Sie beispielsweise __get und __set verwenden, können Sie ein privates Array verwenden, um Daten zu speichern, anstatt die komplexe Logik jedes Mal auszuführen:

 Klasse optimizedMagic {
    private $ data = [];

    öffentliche Funktion __get ($ name) {
        $ this-> Daten zurückgeben [$ name] ?? Null;
    }

    öffentliche Funktion __set ($ name, $ value) {
        $ this-> Daten [$ name] = $ value;
    }
}

In diesem Beispiel verwenden wir ein privates Array, um Daten zu speichern, mit denen die Leistung der __get und __set -Methoden verbessert werden kann.

Im Allgemeinen ist die magische Methode von PHP ein sehr leistungsfähiges Tool, mit dem wir eine komplexe Logik ohne explizite Anrufe implementieren können. Mit diesen Methoden können wir flexiblere und effizientere Code schreiben. Sie sollten aber auch vorsichtig sein, um Überbeanspruchung zu vermeiden und die Lesbarkeit und Wartbarkeit des Codes aufrechtzuerhalten.

Das obige ist der detaillierte Inhalt vonWas sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an?. 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
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么查找字符串是第几位php怎么查找字符串是第几位Apr 22, 2022 pm 06:48 PM

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHPStorm Mac-Version

PHPStorm Mac-Version

Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

Dreamweaver Mac

Dreamweaver Mac

Visuelle Webentwicklungstools