Grundlegendes Erlernen der PHP-Erweiterung

小云云
Freigeben: 2023-03-19 16:24:01
Original
1541 Leute haben es durchsucht

Dieser Artikel führt Sie hauptsächlich in das Schreiben von PHP-Erweiterungen ein. Wir beginnen mit der Erstellung einer PHP-Erweiterung.

PHP ist in der Sprache C geschrieben. Bei jedem PHPer gibt es einen inneren Drang, Erweiterungen zu schreiben. Allerdings fehlt ein guter Einstiegspunkt. Bei der Suche nach PHP-Erweiterungsentwicklung bei Google handelt es sich meist um kopierte Artikel, und einige Leute haben sie sogar in ihren Blogs gepostet, ohne sie überhaupt zu bedienen. Es gibt zwar einige gute Tutorials, diese sind jedoch allesamt Produkte aus der PHP 5-Ära und weisen viele versteckte Fallstricke auf. Ich werde den Vorgang des langsamen Betretens der Grube aufzeichnen, und vielleicht wird dies zu einem „Tutorial“ für andere.

Erstellen Sie eine Erweiterung

Ich glaube, viele Leute haben viele Online-Tutorials gesehen. Die meisten von ihnen lehren uns, diesen Befehl auszuführen: $./ext_skel--extname=extname. Wenn Sie jedoch den PHP-Quellcode klonen, werden Sie feststellen, dass sich unter dem Master-Zweig keine ext/ext_skel-Datei befindet. Also habe ich es zusammengefasst:

Wenn Sie den Quellcode von PHP direkt oder unter der veröffentlichten Version herunterladen, können Sie diesen Befehl ausführen

$ cd ext
$ ./ext_skel --extname=extname
Nach dem Login kopieren

Wenn Sie direkt herunterladen Unter dem Hauptzweig , es gibt nur die Datei ext_skel.php. Zu diesem Zeitpunkt können Sie diese PHP-Datei direkt ausführen

$ cd ext
$ php ext_skel.php --ext extname
Nach dem Login kopieren

Da ich sie direkt unter dem Master-Zweig entwickelt habe, befinden sich die folgenden standardmäßig alle im Master-Zweig . Operationen unten.

Nachdem die Erweiterung generiert wurde, sehen wir vier Dateien und einen Ordner. Zu diesem Zeitpunkt müssen wir nur zwei Dateien verwenden, die .c-Datei und die .h-Datei.

Eine kleine Grube

Nachdem wir die Erweiterung generiert haben, können wir versuchen, sie zu kompilieren

$ phpize
$ ./configure
$ make &&make test
Nach dem Login kopieren

Wir werden überrascht sein, dass beim Kompilieren eine Warnung angezeigt wird .

warning:implicitdeclaration of function
'ZEND_PARSE_PARAMETERS_NONE'isinvalid inC99 [-Wimplicit-function-declaration]
ZEND_PARSE_PARAMETERS_NONE();
^
Nach dem Login kopieren

1 Warnung wurde generiert.

Dann führen Sie make test aus und stellen fest, dass ein Test fehlgeschlagen ist. Das stimmt, die vom Skript für uns generierten Dateien haben unsere eigenen Tests tatsächlich nicht bestanden. Findest du es seltsam? Schauen wir uns die spezifischen Informationen der Warnung an. Funktion ZEND_PARSE_PARAMETERS_NONE nicht gefunden. Ich habe mir die Datei angesehen und sie in Zeile 15 gefunden. Sie können wahrscheinlich erraten, was es bedeutet, wenn Sie sich den Funktionsnamen ansehen. Also habe ich den PHP-Quellcode durchsucht. Aber wir haben eine solche Makrodefinition gefunden.

#ifndefzend_parse_parameters_none
#definezend_parse_parameters_none()
zend_parse_parameters(ZEND_NUM_ARGS(),"")
#endif
Nach dem Login kopieren

Nach dem Ersetzen der ursprünglichen Großbuchstaben erfolgt keine Warnung. Dies kann als das offizielle Graben eines kleinen Lochs für uns angesehen werden. Obwohl es Makrodefinitionen in Großbuchstaben gibt, bin ich mir nicht sicher, warum ein Fehler gemeldet wird.

Definieren Sie eine Funktion

Ich denke, wenn die meisten Leute Erweiterungen schreiben, hoffen sie auf jeden Fall, mindestens eine Funktion zu implementieren. Sie brauchen nicht nur ein paar globale Variablen, um eine Erweiterung zu schreiben (Fog

Hier stellt uns PHP ein nützliches Makro PHP_FUNCTION zur Verfügung. Im generierten Code sind auch zwei Funktionen definiert. Dieses Makro wird schließlich in eine Funktion übersetzt ). Es wird schließlich in voidzif_name(zend_execute_data*execute_data,zval*return_value) übersetzt.

Gleichzeitig sehen wir, dass ein solches Array definiert ist

constzend_function_entry cesium_functions[]={
PHP_FE(cesium_test1,arginfo_cesium_test1)
PHP_FE(cesium_test2,arginfo_cesium_test2)
PHP_FE_END
};
constzend_function_entry cesium_functions[]={
PHP_FE(cesium_test1,arginfo_cesium_test1)
PHP_FE(cesium_test2,arginfo_cesium_test2)
PHP_FE(name,NULL)
PHP_FE_END
};
Nach dem Login kopieren

Denken Sie daran, dies nicht zu tun Fügen Sie am Ende ein Semikolon oder Komma hinzu. Schließlich können wir diese Funktion ausgeben

PHP_FUNCTION(name)
{
php_printf("Hellon");
}
Nach dem Login kopieren

Nach der Kompilierung und Installation können wir diese Funktion verwenden

Verwandte Empfehlungen:

PHP. Kompilierung der Erweiterung Tencent CMEM

Automatische Generierung des Erweiterungsframeworks für PHP-Erweiterung

So schreiben Sie eine PHP-Erweiterung

Das obige ist der detaillierte Inhalt vonGrundlegendes Erlernen der PHP-Erweiterung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!