


Entwicklung einer PHP-Erweiterung: Entwicklung unserer eigenen mathematischen Funktionsbibliothek
Der Inhalt dieses Artikels besteht darin, die Entwicklung der PHP-Erweiterung und die Entwicklung unserer eigenen mathematischen Funktionsbibliothek mitzuteilen. Freunde in Not können sich darauf beziehen.
PHP-Erweiterung Ein fortgeschrittenes PHP-Programm. Eine der Fähigkeiten, die Entwickler verstehen müssen. Wie kann ein beginnender PHP-Erweiterungsentwickler eine ausgereifte Erweiterung entwickeln und in den fortgeschrittenen Bereich der PHP-Entwicklung einsteigen? Diese Reihe von Entwicklungs-Tutorials führt Sie Schritt für Schritt vom Einstieg in die fortgeschrittene Phase.
Diese Tutorialreihe wurde unter Linux entwickelt (Centos wird empfohlen), die PHP-Version ist 5.6 und es wird davon ausgegangen, dass Sie über bestimmte Linux-Betriebserfahrungen und C/C++-Grundlagen verfügen.
Wenn Sie Fragen haben und kommunizieren müssen, treten Sie bitte der technischen QQ-Austauschgruppe 32550793 bei, um mit mir zu kommunizieren.
Das vorherige Kapitel demonstrierte eine „Hello World“-Erweiterung. Jeder hat ein grundlegendes Verständnis des Grundstils des mit PHP-CPP entwickelten erweiterten C++-Quellcodes. Lassen Sie uns eine einfache Bibliothek für mathematische Operationen (mymath) entwickeln, um uns mit dem Exportieren verschiedener Schnittstellenfunktionen vertraut zu machen.
Der Code der mymath-Mathematikbibliothek wurde auf Github veröffentlicht. Sie können ihn direkt über Git herunterladen oder die Webseite in Ihrem Browser öffnen, um den Quellcode herunterzuladen.
Git-Download-Befehlszeile
git clone https://github.com/elvisszhang/phpcpp_mymath.git
Die Browser-Download-URL ist dieselbe wie die Warehouse-URL: https://github.com/elvisszhan...
1 . Ohne Parameter wird eine Erweiterungsfunktion ohne Rückgabewert geschrieben
Funktionsfunktion: Primzahlen innerhalb von 100 drucken
Funktionsname: mm_print_pn_100
So registrieren Sie die Erweiterungsfunktion
Erforderlich Registrieren Sie im Funktionskörper get_module die Funktion mm_print_pn_100, damit sie direkt in PHP aufgerufen werden kann.
PHPCPP_EXPORT void *get_module() { // 必须是static类型,因为扩展对象需要在PHP进程内常驻内存 static Php::Extension extension("mymath", "1.0.0"); //这里可以添加你要暴露给PHP调用的函数 extension.add<mm_print_pn_100>("mm_print_pn_100"); // 返回扩展对象指针 return extension; }
Die Funktionsdeklaration und der Code lauten wie folgt.
Die Funktion erfordert keine Parameter. Es ist nicht nötig, etwas in die Parameterliste der Funktion einzutragen, lassen Sie sie einfach leer. Die Funktion muss keinen Wert zurückgeben und der Rückgabewerttyp ist auf void gesetzt.
//打印100以内的素数 void mm_print_pn_100() { int x = 2; int y = 1; int line = 0; while (x <= 100){ int z = x - y; //z随y递减1 int a = x%z; //取余数 if (a == 0) { //如果x被z整除 if (z == 1) {//如果z为1(x是质数) Php::out << x << " ";//输出x line ++;//每行输出的数的数量加1 } x ++; //x加1 y = 1;//y还原 } else {//如果没有被整除 y ++;//y加1,下一次循环中z减1 } if (line == 10) {//每输出10个数 Php::out << std::endl;//输出一个换行 line = 0;//还原line } } if (line != 0) //最后一行输出换行 Php::out << std::endl; Php::out.flush(); }
PHP-Testcode
<?php //打印100以内的素数 mm_print_pn_100();
Führen Sie den obigen PHP-Code aus. Das Ausgabeergebnis ist
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
2. Erweiterungsfunktion ohne Parameter und Rückgabewert Schreiben
Funktionsfunktion: Berechnen Sie die Summe von 1, 2, 3,...,100
Funktionsname: mm_sum_1_100
Registrieren Sie die Funktion mm_sum_1_100, die Registrierungsmethode ist die gleiche wie die vorherige Abschnitt
extension.add<mm_sum_1_100>("mm_sum_1_100");
Die Funktionsdeklaration und der Code lauten wie folgt.
Die Funktion erfordert keine Parameter, setzen Sie einfach die Funktionsparameterliste auf leer.
Die Funktion hat einen Rückgabewert und der Rückgabewerttyp ist auf PHP::Value festgelegt. Da Php::value den Konstruktor und den Operator = Operator überlastet, können gängige Datentypen (Ganzzahlen, Strings, Gleitkommazahlen, Arrays usw.) direkt zurückgegeben werden.
//获取1-100的和 Php::Value mm_sum_1_100() { int sum = 0; int i; for(i=1;i<=100;i++){ sum += i; } return sum; //可以直接返回sum值,自动生成 Php::value 类型 }
PHP-Testcode:
<?php $sum = mm_sum_1_100(); echo 'sum (1~100) = ' . $sum . PHP_EOL; ?>
Führen Sie den obigen PHP-Code aus. Das Ausgabeergebnis ist
sum (1~100) = 5050
3. Erweiterung mit Parametern und ohne Rückgabewert Funktionsschreiben
Funktionsfunktion: Berechnen Sie eine beliebige Ganzzahl und drucken Sie alle Primzahlen innerhalb der Ganzzahl
Funktionsname: mm_print_pn_any
Registrieren Sie die Funktion mm_print_pn_any, die Registrierungsmethode ist die gleiche wie der vorherige Abschnitt
extension.add<mm_print_pn_any>("mm_print_pn_any");
Die Funktionsdeklaration und der Code lauten wie folgt. Da Parameter erforderlich sind, müssen die Funktionsparameter als Php::Parameters ¶ms geschrieben werden. Da es keinen Rückgabewert gibt, ist der Rückgabewerttyp auf void gesetzt.
Außerdem muss überprüft werden, ob die Parameter eingegeben werden, und der Typ der Parameter muss ebenfalls überprüft werden, ob es sich um eine Ganzzahl handelt. Bei direkter Verwendung ohne Erkennung ist der Code anfällig für Ausnahmen.
//任意给定一个整数,打印出小于等于该整数的所有素数 void mm_print_pn_any(Php::Parameters ¶ms) { //检查必须输入一个参数 if(params.size() == 0){ Php::out << "error: need a parameter " << std::endl; return; } //检查参数必须是整形 if( params[0].type() != Php::Type::Numeric){ Php::out << "error: parameter must be numeric" << std::endl; return; } //检查数字必须大于1 int number = params[0]; if(number <= 1){ Php::out << "error: parameter must be larger than 1" << std::endl; return; } //检查参数必须大于0 int x = 2; int y = 1; int line = 0; while (x <= number){ int z = x - y; //z随y递减1 int a = x%z; //取余数 if (a == 0) { //如果x被z整除 if (z == 1) {//如果z为1(x是质数) Php::out << x << " ";//输出x line ++;//每行输出的数的数量加1 } x ++; //x加1 y = 1;//y还原 } else {//如果没有被整除 y ++;//y加1,下一次循环中z减1 } if (line == 10) {//每输出10个数 Php::out << std::endl;//输出一个换行 line = 0;//还原line } } if (line != 0) //最后一行输出换行 Php::out << std::endl; Php::out.flush(); }
PHP-Testcode
<?php echo '---runing mm_print_pn_any()---' . PHP_EOL; mm_print_pn_any(); echo PHP_EOL . '---runing mm_print_pn_any(\'xyz\')---' . PHP_EOL; mm_print_pn_any('xyz'); echo PHP_EOL . '---runing mm_print_pn_any(200)---' . PHP_EOL; mm_print_pn_any(200); ?>
Führen Sie den obigen PHP-Code aus. Das Ausgabeergebnis ist
---runing mm_print_pn_any()--- error: need a parameter ---runing mm_print_pn_any('xyz')--- error: parameter must be numeric ---runing mm_print_pn_any(200)--- 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199
4. Skalare Parameter, Erweiterungsfunktionen mit Rückgabewerten Schreiben
Funktionsfunktion: Berechnen Sie anhand einer Reihe von Parametern deren Summe
Funktionsname: mm_sum_all
Registrieren Sie die Erweiterungsfunktion mm_sum_all. Die Registrierungsmethode ist dieselbe wie die vorherige Abschnitt
extension.add<mm_sum_all>("mm_sum_all");
Die Funktionsdeklaration und der Code lauten wie folgt.
//获取所有参数的和 Php::Value mm_sum_all(Php::Parameters ¶ms) { int sum = 0; for (auto ¶m : params){ //字符串类型可以自动转换成整形 sum += param; } return sum; }
PHP-Testcode
<?php $sum = mm_sum_all(1,2,'3','5'); //字符串类型可以自动转换成整形 echo 'sum (1,2,\'3\',\'5\') = ' . $sum . PHP_EOL; ?>
Testausgabeergebnis:
sum (1,2,'3','5') = 11
5. Array-Parameter, Schreiben der Erweiterungsfunktion mit Rückgabewert
Funktionsfunktion: Berechnen Sie anhand eines Array-Typparameters die Summe aller Elemente des Arrays
Funktionsname: mm_sum_array
Registrieren Sie die Funktion mm_sum_array, die Registrierungsmethode ist dieselbe wie im ersten Abschnitt
Die Funktionsdeklaration und der Code lauten wie folgt.
//获取所有数组各元素的和 Php::Value mm_sum_array(Php::Parameters ¶ms) { //没有给定参数,返回0 if(params.size() == 0){ return 0; } //参数类型不是数组,转成整形返回 if( params[0].type() != Php::Type::Array){ return (int)params[0]; } //数组中的元素逐个相加 int sum = 0; Php::Value array = params[0]; int size = array.size(); int i; for(i=0;i<size;i++){ sum += array.get(i); } return sum; }
PHP-Testcode
<?php $nums = array(1,3,5,7); $sum = mm_sum_array($nums); echo 'sum (array(1,3,5,7)) = ' . $sum . PHP_EOL; ?>
Testausgabeergebnis:
sum (array(1,3,5,7)) = 16
6. Erweiterungsfunktion schreiben, deren Rückgabewerttyp ein Array ist
< 🎜 Die Rückgabewerte der oben genannten Funktionen sind alle Skalartypen. Wenn Sie einen Array-Typ zurückgeben möchten, können Sie std::vector verwenden Konvertieren Sie es sorgfältig in ein Array, das PHP erkennt. Die Funktion unserer aktuellen Demonstrationsfunktion besteht darin, „ein Array aller Primzahlen innerhalb von 30 zurückzugeben“. Die Methode zum Registrieren von Funktionen in der Erweiterung ist dieselbe wie im ersten Abschnitt. Die Funktionsdeklaration und der Code lauten wie folgt.//获取30以内的所有素数 Php::Value mm_get_pn_30() { std::vector<int> pn; int x = 2; int y = 1; while (x <= 30){ int z = x - y; //z随y递减1 int a = x%z; //取余数 if (a == 0) { //如果x被z整除 if (z == 1) {//如果z为1(x是质数) pn.push_back(x); //放数组中去 } x ++; //x加1 y = 1;//y还原 } else {//如果没有被整除 y ++;//y加1,下一次循环中z减1 } } return pn; }
<?php $pn = mm_get_pn_30(); var_dump($pn); ?>
array(10) { [0]=> int(2) [1]=> int(3) [2]=> int(5) [3]=> int(7) [4]=> int(11) [5]=> int(13) [6]=> int(17) [7]=> int(19) [8]=> int(23) [9]=> int(29) }
PHP-CPP-Funktionsentwicklungshilfe
Vergleich und Einführung verwandter Entwicklungstechnologien für die PHP-Erweiterungsentwicklung
PHP-Erweiterungsentwicklung: Schreiben der ersten Erweiterung „Hallo Welt“
Das obige ist der detaillierte Inhalt vonEntwicklung einer PHP-Erweiterung: Entwicklung unserer eigenen mathematischen Funktionsbibliothek. 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



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.

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

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

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.

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

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

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 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.
