Heim Backend-Entwicklung PHP-Tutorial Vertiefte Kenntnisse der statischen und Ertragsschlüsselwörter in PHP

Vertiefte Kenntnisse der statischen und Ertragsschlüsselwörter in PHP

Sep 19, 2017 am 09:27 AM
php static yield

Dieser Artikel führt Sie hauptsächlich in die relevanten Informationen zu den Static- und Yield-Schlüsselwörtern in PHP ein. Der Artikel stellt sie ausführlich anhand von Beispielcodes vor. Er bietet einen gewissen Referenz-Lernwert für alle, die dies benötigen Artikel Lassen Sie uns mit dem Herausgeber unten lernen.

Vorwort

Dieser Artikel stellt hauptsächlich den relevanten Inhalt zu den Static- und Yield-Schlüsselwörtern in PHP vor und stellt ihn als Referenz und zum Studium zur Verfügung. Im Folgenden gibt es nicht viel zu sagen. Werfen wir einen Blick auf die ausführliche Einführung.

Lassen Sie uns zunächst über das statische Schlüsselwort sprechen. In diesem Artikel geht es nur um die Verwendung statischer Methoden und die späte Bindung.

statisch Wann wird es zum Ändern von Methoden verwendet?

statisches Schlüsselwort wird bekanntermaßen zum Ändern von Methoden und Attributen verwendet. In welchen Szenarien nutzen Sie es also in Ihren Projekten?

Ich bin auf mehrere Projekte gestoßen, bei denen alle Methoden statisch sein müssen. Controller-Methoden können dies natürlich nicht. Einer der Gründe ist: Ist die Effizienz der statischen Methodenausführung hoch? Lassen Sie es uns also auf dieser Grundlage analysieren.

Zunächst einmal habe ich nichts gegen die hohe Ausführungseffizienz einzuwenden. Liegt es an der hohen Effizienz, dass es uneingeschränkt in Projekten eingesetzt werden sollte? Um dieses Problem zu diskutieren, werfen wir zunächst einen Blick auf die Geschichte der Programmiersprachen. In den Anfängen gab es keine objektorientierte Programmierung, und zu dieser Zeit waren im Grunde alle Methoden statische Methoden. Dann entstand die objektorientierte Programmierung und das Konzept der Instanziierung.

Wie aus dem obigen kurzen Entwicklungsprozess ersichtlich ist, scheint es keine Notwendigkeit für eine objektorientierte Existenz zu geben, wenn es nur um die Leistung geht. Was denken diese Meister also über die Einführung von Objektorientierung und Instanziierung in Sprachen wie C++ und Java? Ich denke, das liegt daran, dass die Projekte mit der Entwicklung immer größer werden und eine bessere Organisation des Codes und Programmierdenkens erfordern.

Rückblickend ist die statische Methode, die sie definiert, wirklich effizient, belegt aber weiterhin Speicher. Der Lebenszyklus endet erst, wenn das Programm beendet wird, und einer der Nebenwirkungen ist, dass dies nicht der Fall sein kann Zweitens gibt es aus Sicht des Entwurfsmodus eine starke Kopplung, und drittens gibt es keine Möglichkeit, die durch static definierte Methode zu überschreiben, und Konzepte wie ioc di sind vorhanden nutzlos; viertens verursachen statische Methoden den Menschen Kopfschmerzen.

Auf der Grundlage des oben Gesagten bin ich der Meinung, dass es in Zukunft besser ist, keine statischen Methoden zu verwenden, sondern Methoden ehrlich zu instanziieren und aufzurufen? Wir müssen rational sein, und wir können nicht so extrem sein, dass wir es überall verwenden, und wir können es auch überhaupt nicht verwenden. Fazit: Lernen Sie, objektorientiert zu denken. Ich denke, die ersten Überlegungen beim Schreiben von Code sind: Skalierbarkeit (um schnelle Geschäftsänderungen bewältigen zu können) und Wartbarkeit (um Online-Probleme zeitnah zu beheben). Die hohe Effizienz sollte zuletzt berücksichtigt werden (da es so viele Möglichkeiten gibt, die Effizienz zu optimieren, ist es nicht notwendig, zu jeder Methode „statisch“ hinzuzufügen). Wenn diese Methode aus objektorientierter Sicht völlig unabhängig ist und nichts mit Klassenattributen zu tun hat, verwenden Sie statisch.

Kurz gesagt betrachten wir die Verwendung der Syntax aus einer objektorientierten Perspektive und auf der Ebene des Softwaredesigns, anstatt die Schönheit des Codes aus Gründen der Effizienz zu zerstören.

statische späte statische Bindung

Dies ist ausführlich in der PHP-Dokumentation beschrieben, aber ich habe bisher selten darauf geachtet . Dieser Ort verwendet grundsätzlich self:: um statische Methoden und Eigenschaften aufzurufen.

Ich denke, dass die späte Bindung in gewissem Maße einer Überladung statischer Methoden gleicht. Hier ist ein Beispiel aus dem PHP-Dokument, um es zu beschreiben:


<?php
class A {
 public static function who() {
 echo __CLASS__;
 }
 public static function test() {
 self::who();
 static::who();// 后期静态绑定
 }
}

class B extends A {
 public static function who() {
 echo __CLASS__;
 }
}

B::test();
Nach dem Login kopieren

Wenn es von self::who() aufgerufen wird, wird Folgendes ausgegeben: A. Wenn es static::who() ist, wird B

ausgegeben. Ist es aus dieser Sicht gleichbedeutend damit, dass Klasse B die who()-Methode der übergeordneten Klasse A überschreibt? Wenn Sie diese Funktion also flexibel nutzen, können Sie die Statik flexibler gestalten. Nutzen Sie die Leistungsvorteile voll aus und lösen Sie das Problem der schlechten Skalierbarkeit. Natürlich ist es immer noch dasselbe. Aus objektorientierter Sicht geschieht alles in Maßen.

Nutzungsszenarien von Yield in PHP

Um ehrlich zu sein, wusste ich lange nicht, dass PHP solche hat eine Syntax. Bis ich eines Tages auf dieses Schlüsselwort in js stieß, hatte ich das Gefühl, dass es so unklar ist. Warum ist es nicht in der besten Sprache der Welt verfügbar? Wenn ich mir die Dokumentation noch einmal ansehe, kann ich erkennen, dass es tatsächlich die beste Sprache der Welt ist.

Was sind also die Nutzungsszenarien von Yield? Erst kürzlich hat mich jemand auf SG gebeten, das Problem zu lösen. Ich hoffe, dass jeder es besser in Verbindung mit seinem eigenen Unternehmen nutzen kann. Es gibt keinen Vergleich zwischen yield und Iterator. Ich glaube, dass Sie nach der Lektüre verstehen werden, welcher der beiden kürzer ist.

先说它的使用场景,还是得先回顾历史,在没有 yield 之前,我们要生成一个数组,只能一次性把所有内容全部读入内存(当然也可以通过实现 Iterator接口实现一个迭代)。有了 yield 之后,我们可以通过一个简单的 yield 关键字,完成一个数组的生成,并且是用到的时候才会产生值,相对而言内存占用肯定会下降。空口无凭,咱们下面通过代码实际检验一下上面的结论。

先来看普通模式


<?php

function generateData($max)
{
 $arr = [];
 for ($i = 0; $i <= $max; $i++) {
 $arr[] = $i;
 }
}

echo &#39;开始前内存占用:&#39; . memory_get_usage() . PHP_EOL;
$data = generateData(100000);
echo &#39;生成完数组后内存占用:&#39; . memory_get_usage() . PHP_EOL;
unset($data);
echo &#39;释放后的内存占用:&#39; . memory_get_usage() . PHP_EOL;
Nach dem Login kopieren

运行得到结果:


开始前内存占用:231528
生成完数组后内存占用:231712
释放后的内存占用:231576
Nach dem Login kopieren

前后的差值是:184

使用yield后的效果


function generateData($max)
{
 for ($i = 0; $i <= $max; $i++) {
 yield $i;
 }
}

echo &#39;开始前内存占用:&#39; . memory_get_usage() . PHP_EOL;
$data = generateData(100000);// 这里实际上得到的是一个迭代器
echo &#39;生成完数组后内存占用:&#39; . memory_get_usage() . PHP_EOL;
unset($data);
echo &#39;释放后的内存占用:&#39; . memory_get_usage() . PHP_EOL;
Nach dem Login kopieren

运行结果:


开始前内存占用:228968
生成完数组后内存占用:229824
释放后的内存占用:229016
Nach dem Login kopieren
Nach dem Login kopieren

前后的差值是:856

奇怪,使用了 yield 后,内存占用反而上升了,这是什么鬼?别急。上面我们参数传入的是 1,000,00,我现在将传入参数改成改成 1,000,000试试。

第一个方法得到的结果是:


开始前内存占用:231528

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes) in /test/yield.php on line 6
Nach dem Login kopieren

看了吧,一百万次的循环时,一次性载入内存,超出了限制。那么再来看 yield 的执行结果:


开始前内存占用:228968
生成完数组后内存占用:229824
释放后的内存占用:229016
Nach dem Login kopieren
Nach dem Login kopieren

前后的差值依然是:856

好了到这里,应该看出来了,yield无论数组大小,占用均是 856 ,这是因为它自身,它在你进行迭代的时候才会产生真实数据。

所以如果你的数据来源非常大,那么用 yield 吧。如果数据来源很小,当然选择一次载入内存。

总结

Das obige ist der detaillierte Inhalt vonVertiefte Kenntnisse der statischen und Ertragsschlüsselwörter in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

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ßer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

7 PHP-Funktionen, die ich leider vorher nicht kannte 7 PHP-Funktionen, die ich leider vorher nicht kannte Nov 13, 2024 am 09:42 AM

Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

Wie analysiert und verarbeitet man HTML/XML in PHP? Wie analysiert und verarbeitet man HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge Feb 07, 2025 pm 12:12 PM

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

Erklären Sie die späte statische Bindung in PHP (statisch: :). Erklären Sie die späte statische Bindung in PHP (statisch: :). Apr 03, 2025 am 12:04 AM

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Apr 03, 2025 am 12:03 AM

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.

See all articles