


Entwicklung von PHP-Erweiterungen mit C und PHP-CPP: Fortgeschrittene
PHP-Erweiterungen mit C und PHP-CPP entwickeln: Fortgeschrittene Themen und Best Practices
Schlüsselpunkte
- Die Entwicklung von PHP-Erweiterungen mit C und PHP-CPP beinhaltet fortschrittliche Themen wie die Rückgabe von "diese" Zeiger, die Rückgabe komplexer Objektzeiger, die Aufdeckung von magischen Methoden, die Verknüpfung von Mitgliedern und Ausnahmwurf und Handhabung in PHP.
__toString
Die -Bibliothek der PHP-CPP ist ideal für Projekte, die in Zukunft Software, Datenstrukturen oder Algorithmen für Nicht-Php-Projekte erfordern, oder Projekte, bei denen Tools oder Bibliotheken verwendet werden müssen, die noch nicht als PHP-Erweiterungen bereitgestellt werden. Es bietet auch die Leistungsvorteile des C/C-Codes und beibehalten strukturierter, objektorientierter Code für das einfache Verständnis und die Wartung. - PHP-CPP-Bibliothek kann für persönliche und kommerzielle Projekte verwendet werden. Obwohl die Bibliothek selbst frei ist, kann es Zeit und Ressourcen benötigen, um zu lernen, wie sie effektiv verwendet werden und PHP -Erweiterungen aufrechterhalten werden können.
- Häufige Herausforderungen in der PHP -Erweiterungsentwicklung unter Verwendung von C enthalten die korrekte Verwaltung des Speichers, die Behandlung von Fehlern und Ausnahmen sowie die Schnittstelle zwischen PHP und C. Diese Herausforderungen können durch einen Einblick in PHP und C gewonnen werden, indem sie gute Programmierpraktiken verwenden und die von PHP-CPP bereitgestellten Funktionen und Tools nutzen.
In diesem Artikel werden wir weiter in die Entwicklung der komplexen Bibliothek eintauchen, mehr Mitgliedsfunktionen hinzufügen und einige erweiterte Themen beim Schreiben von objektorientierten PHP-Erweiterungen unter Verwendung von PHP-CPP ansprechen:
- zurück diesen Zeiger;
- gibt den komplexen Objektzeiger zurück, d. H. Komplex *;
- öffnen magische Methode;
- Kettenelementfunktionsaufruf;
__toString
Bedecken Sie die Ausnahme und behandeln Sie sie in PHP - Der vollständige komplexe Bibliotheksquellcode und Test -PHP -Skripte befinden sich in diesem GitHub -Repository.
- Beginnen wir an.
Vorbereitung
Der gesamte Prozess der Vorbereitung der Umgebung wird im ersten Artikel erläutert.
Gibt diesen Zeiger in Czurück
Wie im zweiten Artikel erwähnt, verwenden wir Mitgliederfunktionen, um verschiedene mathematische Operationen für komplexe Zahlen auszuführen. In dieser Demonstration werden wir vier solcher Funktionen implementieren: Add, Sub, Mul und Div. Ich werde die ersten drei zuerst erklären. Die DIV -Funktion beinhaltet die Ausnahmehandhabung, die später diskutiert wird. Schauen wir uns die MUL -Funktion an (zur Multiplikation). Die Hinzufügen und Unterfunktionen sind ungefähr gleich.
HINWEIS: In diesem Artikel werde ich einige grundlegende Themen, die zuvor besprochen werden, nicht vorstellen, z. B. die Änderung von Makefile- und INI -Dateien, Registrieren von Mitgliederfunktionen, Klassen und Namespaces usw. Weitere Informationen finden Sie im vorherigen Abschnitt für diese Inhalte.
, die diesen Zeiger von C auf PHP zurückgibt, ist einfach. In dieser C -Funktion kann dieser Zeiger (als komplex* Typ) als PHP :: Werttyp an PHP zurückgegeben werden. Die Konvertierung verliert keine Objektinformationen. Es erfordert auch keine explizite Konvertierung vom Typ.
Return komplexen Objektzeiger
Rückgabe Dies bedeutet normalerweise, dass sich das Objekt selbst geändert hat. In einigen Fällen möchten wir jedoch möglicherweise ein neues Objekt zurückgeben und das "aktuelle" Objekt (Call -Objekt) unverändert lassen.
In unserer komplexen Klasse haben wir eine solche Funktion, die die konjugierte Anzahl einer bestimmten komplexen Zahl zurückgibt (ein Bi wird A-BI).
Php::Value add(Php::Parameters ¶ms) { Php::Value t = params[0]; Complex *a = (Complex *) t.implementation(); r += (double) a->getReal(); i += (double) a->getImage(); return this; }
Der wichtigste Punkt hier ist, dass wir Php :: Objekt verwenden müssen, um unser komplexes* Objekt explizit in Php :: -Objekt umzuwandeln. Wenn das Objekt später vom PHP -Skript analysiert wird, werden die Klasseninformationen ordnungsgemäß gewährleistet und aufbewahrt Seine Zugänglichkeit.
Der erste Parameter dieser Funktion ist der Klassentyp, in diesem Fall tryprlex. Ich benutze diesen Namen, weil ich diese Klasse ("komplex") in einen separaten Namespace ("tr") eingewickelt habe.
Der zweite Parameter ist das zu übergebene Objekt.
Rückgabe einer neuen Klasseninstanz ist etwas schwieriger, als nur diesen Zeiger zurückzugeben, aber es ist immer noch überschaubar, solange Sie die Dokumentation lesen und den richtigen Teil finden. Weitere Nutzungsbeispiele möchten diesen Abschnitt in der offiziellen PHP-CPP-Dokumentation lesen.
öffnen __toString Magic -Methode
In unserer Klasse gibt es eine __toString
-Funktion, die Pluralnummern auf lesbare Weise druckt, zum Beispiel: 1 2i. In meinem vorherigen Beitrag wird diese Funktion nicht in der PHP-CPP-Terminologie freigelegt (oder "registriert"), kann aber immer noch von InnenpHP aufgerufen werden. Damit diese Funktion das komplexe Objekt auffordert, nachdem wir einige mathematische Operationen angewendet haben (z. Es ist ausdrücklich in der Erweiterung registriert:
Php::Value conjugate() { Complex *t = new Complex(); t->r = r; t->i = -i; return Php::Object("tr\Complex", t); }
Das Problem, das wir im PHP-CPP-Repository-Problem Nr. 150 eingereicht haben, werden ausführlich beschrieben, warum wir dies tun müssen.
Kettenelementfunktion Aufruf
Eine Sache, die in dieser Klasse implementiert werden muss, besteht darin, Mitgliederfunktionen zu verknüpfen, damit wir die folgende Berechnung ausführen können: $ a- & gt; add ($ b)-& gt; sub ($ c). Das Ergebnis sollte immer noch in der Lage sein, seine Mitgliederfunktionen anzurufen.
Dies geschieht mit der obigen Methode, dh, die diesen Zeiger an PHP zurückgibt. Ältere PHP-CPP-Bibliotheken haben jedoch Fehler, wenn Objekte derenferenzierten, und wenn die Verbindungsmethode aufgerufen wird, wird ein "Segmentfehler" erstellt.
Das Problem wurde eingereicht (Nr. 151) und ein Commit mit dem PHP-CPP-Quellcode-Patch wurde eingereicht. Wenn Sie eine ältere Version der PHP-CPP-Bibliothek verwenden, um die PHP-CPP-Bibliothek und Ihre eigene Bibliothek zu kompilieren, aktualisieren Sie den PHP-Quellcode und umfassen Sie die PHP-CPP-Bibliothek und Ihre Bibliothek neu.
Wie in der Übermittlungsergebnis erläutert:
complex.method("__toString", &Complex::__toString);
Ich bin froh, dass meine eigene Projektarbeit den Bibliotheken helfen kann, die ich verwende, besser werden.
Ausnahmewerfen und Handling in Php
Zwei weitere Funktionen in unserer komplexen Klasse können Ausnahmen zu PHP zur Verarbeitung zurückbringen: Div und Phi. Ersteres führt den Teilungsvorgang durch, während letztere den Winkel der komplexen Zahl zurückgibt, wie in seiner alternativen Darstellung der polaren Koordinatendarstellung (R, θ) gezeigt.
Wenn Sie eine Pluralnummer als Parameter (oder Anrufer) übergeben, aber der Teil und die imaginären Teile tatsächlich 0 sind, können beide Vorgänge fehlschlagen. Für diese beiden Operationen müssen wir Ausnahmebehandlung durchführen. Denken Sie daran, dass wir Ausnahmen in den C -Code werfen, und das PHP -Skript fängt die Ausnahme ein und führt die erforderliche Verarbeitung durch:
Php::Value add(Php::Parameters ¶ms) { Php::Value t = params[0]; Complex *a = (Complex *) t.implementation(); r += (double) a->getReal(); i += (double) a->getImage(); return this; }
In PHP -Skripten fangen wir diese Ausnahme wie folgt an:
Php::Value conjugate() { Complex *t = new Complex(); t->r = r; t->i = -i; return Php::Object("tr\Complex", t); }
Das obige Code -Snippet zeigt die folgende Textzeile an:
complex.method("__toString", &Complex::__toString);
Es ist sehr einfach, oder? Die in unserer Erweiterung konstruierte C -Ausnahme wird an PHP zurückgegeben und korrekt gefangen. Darüber hinaus können wir Ausnahmen ausführen, wie wir native PHP -Ausnahmen behandeln, die von anderen PHP -Codes geworfen werden!
Testen Sie alle Funktionen
Schließlich können wir die Komplex.SO -Erweiterung für unsere PHP -Installation über make && sudo make install
kompilieren und installieren. Wenn alles gut geht, können wir die Installation der Erweiterung überprüfen, indem wir den folgenden Befehl im Terminal ausgeben:
<code>修复问题#151,链式方法调用无法正常工作…… ……因为每个对象的引用计数未正确更新,这导致即使对象已分配给不同的变量,该对象也会被销毁。</code>
Das Terminal sollte eine Zeile mit "/etc/php5/cli/conf.d/complex.ini" anzeigen. Wir können sicherstellen, dass unsere Erweiterung installiert und bereit ist, von jedem PHP -Skript aufgerufen zu werden.
Hinweis: Wenn wir die Makefile für diese Erweiterung überprüfen, werden wir feststellen, dass wir diese PHP -Erweiterung in seine CLI -Umgebung installieren. Wenn wir diese Erweiterung installieren möchten, damit Apache sie laden kann, ändern wir die folgende Zeile:
Php::Value div(Php::Parameters ¶ms) { Php::Value t = params[0]; Complex *b = (Complex*) t.implementation(); double t1 = b->mod() * b->mod(); if (t1 == 0) throw Php::Exception("Division by zero"); double tr = r * (double) (b->getReal()) + i * (double) (b->getImage()); double ti = i * (double) (b->getReal()) - r * (double) (b->getImage()); r = tr / t1; i = ti / t1; return this; }
Das Test -PHP -Skript für diese Erweiterung lautet wie folgt mit einigen Notizen:
$a=new tr\Complex(1,2); $c=new tr\Complex(); //$c实际上是0+0i try { $res=$a->div($c); } catch(Exception $e) { echo "Caught exception: ".$e->getMessage()."\n"; } }
Alle Testskripte sollten korrekt ausgeführt werden und die Ausnahme wird korrekt erfasst.
Schlussfolgerung
Dies fasst meine 3 -Artikel -Serie zum Erstellen dieser leistungsstarken Bibliothek mit C für PHP -Erweiterungen zusammen. Wir behandeln die Grundlagen, objektorientierten Aspekte und einige erweiterte Themen in der objektorientierten Programmierung. Wir haben auch dazu beigetragen, dass PHP-CPP sich verbessert.
Was können wir sonst noch mit PHP-CPP machen? Ich werde ein paar Zeilen der E-Mail-Kommunikation zitieren, die ich von Emiel Bruijntjes (Co-Autor von PHP-CPP) erhalten habe:
Wenn Sie an einem Projekt arbeiten und eine oder mehrere der folgenden Anforderungen haben, ist die PHP-CPP-Bibliothek ideal: -Sie arbeiten an Software/Datenstrukturen/Algorithmen und möchten sicherstellen, dass Ihre Software in Zukunft auch in Nicht-Php-Projekten verwendet werden kann. - Sie möchten ein Tool oder eine Bibliothek verwenden, die noch nicht als PHP -Erweiterung verfügbar ist. -Sie möchten eine bessere Leistung Ihres C/C-Codes (im Vergleich zu PHP), aber Sie möchten auch strukturierten, objektorientierten Code für das einfache Verständnis und die Wartung durch andere Entwickler/Kollegen erstellen.
Die Möglichkeiten sind riesig: Frameworks (wie Phalcon), Vorlagensprachen (wie Smarty oder Twig) usw.
Bitte hinterlassen Sie Ihre Kommentare und Meinungen und teilen Sie uns mit, was Sie mit dieser Bibliothek getan haben!
FAQs zur Entwicklung von PHP -Erweiterungen mit C
Wie hoch sind die Vorteile der Verwendung von C zur Entwicklung von PHP -Erweiterungen?
Es gibt viele Vorteile für die Entwicklung von PHP -Erweiterungen mit C. C. Erstens können Sie die Leistung und Flexibilität von C in Ihrer PHP -Anwendung nutzen. Dies kann die Leistung verbessern, insbesondere bei rechenintensiven Aufgaben. Zweitens bietet es eine Möglichkeit, vorhandenen C -Code in einer PHP -Umgebung wiederzuverwenden, mit der viel Entwicklungszeit und -aufwand sparen können. Schließlich können Sie benutzerdefinierte PHP -Erweiterungen erstellen, die die Funktionalität von PHP erweitern und Funktionen bereitstellen, die in der Standard -PHP -Bibliothek nicht verfügbar sind.
Wie kann ich C für die Entwicklung von PHP -Erweiterung beginnen?
Um C für die Entwicklung von PHP -Erweiterung zu verwenden, müssen Sie ein grundlegendes Verständnis von PHP- und C -Programmiersprachen haben. Sie müssen auch die PHP -Entwicklungsumgebung und den C -Compiler installieren. Nach der Installation dieser Voraussetzungen können Sie mit dem Schreiben von PHP -Erweiterungen in C beginnen, in C. Es sind viele Ressourcen online verfügbar, einschließlich Tutorials und Beispielcode, um Sie durch diesen Prozess zu führen.
Was ist PHP-CPP und wie hilft es der PHP-Erweiterungentwicklung?
PHP-CPP ist eine Bibliothek zur Entwicklung von PHP-Erweiterungen mit C. Es bietet eine Reihe von C -Klassen und -Methoden und vereinfacht den Prozess des Schreibens von PHP -Erweiterungen. Mit PHP-CPP können Sie PHP-Erweiterungen auf natürlichere und intuitivere Weise mit den bekannten Syntax und Konzepten von C schreiben. Dies kann den Entwicklungsprozess effizienter gestalten und Fehler verringern.
Kann ich PHP-CPP für kommerzielle Projekte verwenden?
Ja, PHP-CPP ist Open-Source-Software, die in persönlichen und kommerziellen Projekten verwendet werden kann. Es ist jedoch wichtig zu verstehen, dass die Bibliothek selbst zwar frei ist, Sie jedoch möglicherweise Zeit und Ressourcen investieren müssen, um zu lernen, wie Sie sie effektiv verwenden und Ihre PHP -Erweiterungen aufrechterhalten.
Was sind einige häufige Herausforderungen für die Entwicklung von PHP -Erweiterung mit C und wie kann ich sie überwinden?
Einige häufige Herausforderungen bei der Entwicklung von PHP -Erweiterung unter Verwendung von C umfassen die korrekte Verwaltung des Speichers, die Behandlung von Fehlern und Ausnahmen sowie die Schnittstelle zwischen PHP und C. Diese Herausforderungen können durch einen Einblick in PHP und C gewonnen werden, indem sie gute Programmierpraktiken verwenden und die von PHP-CPP bereitgestellten Funktionen und Tools nutzen.
Wie kann man PHP -Erweiterungen in c debuggen?
in C geschriebene PHP -Erweiterungen können mit Standard -C -Debugging -Tools debuggen werden. Darüber hinaus bietet PHP-CPP einige Funktionen, mit denen das Debuggen wie Ausnahmebehandlung und Fehlerberichterstattung helfen können.
Kann ich PHP-CPP mit anderen C-Bibliotheken verwenden?
Ja, PHP-CPP kann mit anderen C-Bibliotheken verwendet werden. Auf diese Weise können Sie verschiedene C -Funktionen in PHP -Erweiterungen nutzen.
Wie verbessert man die Leistung von PHP -Erweiterungen in C?
Sie können die Leistung von PHP -Erweiterungen verbessern, indem Sie effiziente Algorithmen und Datenstrukturen verwenden, die Speicherverwendung minimieren und den C -Code optimieren. Darüber hinaus bietet PHP-CPP einige Funktionen, mit denen die Leistung verbessert wird, z. B. den direkten Zugriff auf PHP-Variablen und -funktionen.
Kann ich Code zum PHP-CPP-Projekt beitragen?
Ja, das PHP-CPP-Projekt ist Open Source und der Beitrag der Community ist willkommen. Sie können Ihren Code beitragen, indem Sie Fehler melden, neue Funktionen vorschlagen oder Patches senden.
Wo finde ich mehr Ressourcen für die Verwendung von C für die Entwicklung von PHP -Erweiterung?
Es gibt viele Ressourcen online für das Lernen, C für die Entwicklung von PHP -Erweiterung zu lernen. Diese Ressourcen umfassen Tutorials, Beispielcode, Dokumentation und Foren. Darüber hinaus bietet die PHP-CPP-Website eine große Menge an Informationen und Ressourcen zur Verwendung der Bibliothek.
Das obige ist der detaillierte Inhalt vonEntwicklung von PHP-Erweiterungen mit C und PHP-CPP: Fortgeschrittene. 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

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.

Die Aufzählungsfunktion in Php8.1 verbessert die Klarheit und Type des Codes, indem benannte Konstanten definiert werden. 1) Aufzählungen können Ganzzahlen, Zeichenfolgen oder Objekte sein, die die Lesbarkeit der Code und die Type der Type verbessern. 2) Die Aufzählung basiert auf der Klasse und unterstützt objektorientierte Merkmale wie Traversal und Reflexion. 3) Die Aufzählung kann zum Vergleich und zur Zuordnung verwendet werden, um die Sicherheit der Typ zu gewährleisten. 4) Aufzählung unterstützt das Hinzufügen von Methoden zur Implementierung einer komplexen Logik. 5) Strenge Typ Überprüfung und Fehlerbehandlung können häufig auftretende Fehler vermeiden. 6) Die Aufzählung verringert den magischen Wert und verbessert die Wartbarkeit, achten Sie jedoch auf die Leistungsoptimierung.

Die Hijacking der Sitzung kann in den folgenden Schritten erreicht werden: 1. Erhalten Sie die Sitzungs -ID, 2. Verwenden Sie die Sitzungs -ID, 3. Halten Sie die Sitzung aktiv. Zu den Methoden zur Verhinderung der Sitzung der Sitzung in PHP gehören: 1. Verwenden Sie die Funktion Session_regenerate_id (), um die Sitzungs -ID zu regenerieren. 2. Store -Sitzungsdaten über die Datenbank, 3. Stellen Sie sicher, dass alle Sitzungsdaten über HTTPS übertragen werden.

Die Anwendung des soliden Prinzips in der PHP -Entwicklung umfasst: 1. Prinzip der Einzelverantwortung (SRP): Jede Klasse ist nur für eine Funktion verantwortlich. 2. Open and Close Principle (OCP): Änderungen werden eher durch Erweiterung als durch Modifikation erreicht. 3.. Lischs Substitutionsprinzip (LSP): Unterklassen können Basisklassen ersetzen, ohne die Programmgenauigkeit zu beeinträchtigen. 4. Schnittstellen-Isolationsprinzip (ISP): Verwenden Sie feinkörnige Schnittstellen, um Abhängigkeiten und nicht verwendete Methoden zu vermeiden. 5. Abhängigkeitsinversionsprinzip (DIP): Hoch- und niedrige Module beruhen auf der Abstraktion und werden durch Abhängigkeitsinjektion implementiert.

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.

Die RESTAPI -Designprinzipien umfassen Ressourcendefinition, URI -Design, HTTP -Methodenverbrauch, Statuscode -Nutzung, Versionskontrolle und Hassoas. 1. Ressourcen sollten durch Substantive dargestellt und in einer Hierarchie aufrechterhalten werden. 2. HTTP -Methoden sollten ihrer Semantik entsprechen, z. B. Get wird verwendet, um Ressourcen zu erhalten. 3. Der Statuscode sollte korrekt verwendet werden, z. B. 404 bedeutet, dass die Ressource nicht vorhanden ist. 4. Die Versionskontrolle kann über URI oder Header implementiert werden. 5. Hateoas startet Client -Operationen durch Links als Antwort.

In PHP wird das Ausnahmebehandlung durch den Versuch, Fang, schließlich und werfen Keywords erreicht. 1) Der Try -Block umgibt den Code, der Ausnahmen auslösen kann. 2) Der Catch -Block behandelt Ausnahmen; 3) Block stellt schließlich sicher, dass der Code immer ausgeführt wird. 4) Wurf wird verwendet, um Ausnahmen manuell zu werfen. Diese Mechanismen verbessern die Robustheit und Wartbarkeit Ihres Codes.

Die Hauptfunktion anonymer Klassen in PHP besteht darin, einmalige Objekte zu erstellen. 1. Anonyme Klassen ermöglichen es, Klassen ohne Namen direkt im Code zu definieren, was für vorübergehende Anforderungen geeignet ist. 2. Sie können Klassen erben oder Schnittstellen implementieren, um die Flexibilität zu erhöhen. 3. Achten Sie bei der Verwendung auf Leistung und Code -Lesbarkeit und vermeiden Sie es, dieselben anonymen Klassen wiederholt zu definieren.
