


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!

Die Absolute -Sitzungs -Zeitlimit startet zum Zeitpunkt der Erstellung der Sitzung, während eine Zeitlimit in der Leerlaufsitzung zum Zeitpunkt der No -Operation des Benutzers beginnt. Das Absolute -Sitzungs -Zeitlimit ist für Szenarien geeignet, in denen eine strenge Kontrolle des Sitzungslebenszyklus erforderlich ist, z. B. finanzielle Anwendungen. Das Timeout der Leerlaufsitzung eignet sich für Anwendungen, die die Benutzer für lange Zeit aktiv halten, z. B. soziale Medien.

Der Serversitzungsausfall kann durch Befolgen der Schritte gelöst werden: 1. Überprüfen Sie die Serverkonfiguration, um sicherzustellen, dass die Sitzung korrekt festgelegt wird. 2. Überprüfen Sie die Client -Cookies, bestätigen Sie, dass der Browser es unterstützt und korrekt senden. 3. Überprüfen Sie die Speicherdienste wie Redis, um sicherzustellen, dass sie normal arbeiten. 4. Überprüfen Sie den Anwendungscode, um die korrekte Sitzungslogik sicherzustellen. Durch diese Schritte können Konversationsprobleme effektiv diagnostiziert und repariert werden und die Benutzererfahrung verbessert werden.

Session_Start () iscrucialinphPFormAnagingUSSERSIONS.1) ItinitiatesanewSessionifnoneExists, 2) Wiederaufnahmen und 3) setaSessionCookieforContinuityAcrossRequests, aktivierende Anwendungen wie

Das Festlegen des HTTPonly -Flags ist für Sitzungscookies von entscheidender Bedeutung, da es effektiv verhindern und die Informationen zur Benutzersitzung schützen kann. Insbesondere 1) Das Httponly -Flag verhindert, dass JavaScript auf Cookies zugreift, 2) Das Flag kann durch SetCookies eingestellt werden und in PHP und Flasche 3), obwohl es nicht von allen Angriffen von allen Angriffen verhindert werden kann, Teil der Gesamtsicherheitsrichtlinie sein sollte.

PhpSsionSsionSolvetheProblemofMaintainingStateAcrossmultipehttprequestsBoringDataontheserverandassociatingitittprequests.1) Sie starteten die Stundeataserver-Seite, typischerweise infileSordatabasen, undusaSasionIdinacookookookotenData

PHPSSIONS CANSTORESTRINGEN, ZUGNALTEN, ARRAYS, ANDOBjekte.1.

TostartaphpSession, useSession_start () atthescript'Sbeginning.1) PlaCEITBEFOREANYOUTPUTTOTHESESSIONSCOOKIE.2) useSsionsforuserDatalikeloginStatusOrShopingCarts

Die Sitzung der Sitzung bezieht sich auf die Generierung einer neuen Sitzungs -ID und die Ungültigmachung der alten ID, wenn der Benutzer sensible Vorgänge bei festgelegten Sitzungsangriffen ausführt. Die Implementierungsschritte umfassen: 1. Erkennen sensibler Vorgänge, 2. Erstellen neuer Sitzungs-ID, 3..


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 Linux neue Version
SublimeText3 Linux neueste Version

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

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),
