Heim  >  Artikel  >  Backend-Entwicklung  >  Vergleich und Einführung verwandter Entwicklungstechnologien für die PHP-Erweiterungsentwicklung 1

Vergleich und Einführung verwandter Entwicklungstechnologien für die PHP-Erweiterungsentwicklung 1

不言
不言Original
2018-04-17 14:10:511189Durchsuche

Dieser Artikel stellt hauptsächlich den Vergleich und die Einführung der PHP-Erweiterungsentwicklung und verwandter Entwicklungstechnologien vor. Jetzt kann ich ihn mit allen teilen, die ihn benötigen.

Die PHP-Erweiterung ist fortgeschritten PHP Eine der Fähigkeiten, die Programmierer beherrschen 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.

Es gibt verschiedene technische Methoden und Frameworks für die Entwicklung von PHP-Erweiterungen. Für Anfänger ist es am besten, ein Framework zu wählen, das am einfachsten zu starten ist und die schnellsten Ergebnisse liefert, um das Interesse am Lernen zu steigern. Vergleichen wir jedes technische Framework einzeln, damit jeder das finden kann, das am besten zu ihm passt.

1. Verwenden Sie ext-skel C-Sprachentwicklung

ext-skel ist ein Tool zum Generieren von PHP-Erweiterungen, das im offiziellen PHP-Quellcode bereitgestellt wird. Es kann ein PHP-Erweiterungsskelett einer C-Sprache generieren Rahmen.

PHP ist für Erweiterungsentwickler offiziell sehr unfreundlich. Die im Quellcode bereitgestellte Zend-API ist äußerst komplex und chaotisch und enthält zahlreiche Methoden zum Schreiben von Makros. Es gibt viele Fallstricke in der Zend-API, in die normale Entwickler leicht hineinfallen können. Es treten verschiedene unerklärliche Core-Dump-Probleme auf. Für die Zend-API gibt es fast keine Dokumentation, und Entwickler müssen viel Zeit in das Lernen investieren, wenn sie diese Fähigkeit wirklich beherrschen wollen.

Das Obige sind die herzlichen Worte der Swoole-Plug-In-Entwickler. Es ist ersichtlich, dass die Verwendung dieser Methode zur Entwicklung von Plug-Ins ein schwerer Schlag für unser Selbstvertrauen als Anfänger sein wird. Glücklicherweise haben einige Meister andere Methoden zum Entwickeln von PHP-Erweiterungen für uns vorbereitet. Wir müssen weder die ZEND-API lernen noch die C-Sprache beherrschen, und wir können trotzdem PHP-Erweiterungen entwickeln, ohne dass die Ausführungsgeschwindigkeit der generierten Erweiterungen beeinträchtigt wird viel anders als diejenigen, die in der C-Sprache entwickelt wurden.

2. Verwenden Sie die PHP-ähnliche Sprachentwicklung von Zephir.

Zephir bietet eine High-Level-Sprachsyntax ähnlich wie PHP, um automatisch erweiterten C-Sprachcode zu generieren, was das Schreiben von PHP-Erweiterungen sehr einfach macht. Diese Entwicklungsmethode bringt jedoch ein Problem mit sich: Da sie nicht in der C/C++-Sprache entwickelt wird, gibt es keine Möglichkeit, verschiedene vorhandene C/C++-Entwicklungsbibliotheken direkt zu verwenden, um leistungsstarke Funktionen zu erreichen. Daher fühlt es sich etwas geschmacklos an.

3. Entwicklung mit PHP-X C++-Sprache

php-x ist ein C++-basiertes Erweiterungsentwicklungsframework, das vom bekannten Swoole-Erweiterungsentwickler auf der Grundlage jahrelanger Entwicklungserfahrung verfeinert wurde. Der Dokumentation nach zu urteilen, ist dies ein relativ einfach zu verwendendes Entwicklungsframework mit vollständigen Datentypen. Es ist dem Entwicklungsstil von PHP CPP sehr ähnlich, aber ich habe es noch nicht erlebt.
Laut der offiziellen PHP-X-Dokumentation unterstützt die entwickelte Erweiterung nur PHP7 und höher, was schade ist.

4. Verwenden Sie phpcpp C++-Sprachentwicklung

PHP CPP ist mein empfohlenes Framework für die PHP-Erweiterungsentwicklung. Es ist einfach und leicht zu verstehen, leistungsstark, hocheffizient, einfach zu warten und schnell Ausführung.

PHP CPP ist eine kostenlose PHP-Entwicklungserweiterungsbibliothek, hauptsächlich für die Sprache C++. Sie kann Klassensammlungen erweitern und erstellen, um Erweiterungen für Entwickler interessanter und nützlicher zu machen Code, der leicht zu verstehen, mühelos zu warten und schön im Code ist. In C++ geschriebene Algorithmen sehen fast identisch mit in PHP geschriebenen Algorithmen aus. Wenn Sie wissen, wie man in PHP programmiert, können Sie leicht lernen, wie man dasselbe in C++ macht.

  • Vorteil 1: Es sind keine Kenntnisse der Zend-Engine erforderlich.

Die Interna der Zend-Engine sind zu kompliziert. Der Code der Zend-Engine ist chaotisch und größtenteils undokumentiert. Aber die PHP-CPP-Bibliothek kapselt all diese komplexen Strukturen bereits in sehr einfach zu verwendenden C++-Klassen und -Objekten. Sie können erstaunlich schnelle Algorithmen in C++ schreiben, ohne die Zend Engine direkt aufrufen oder sich den Zend Engine-Quellcode ansehen zu müssen. Mit PHP-CPP können Sie nativen Code schreiben, ohne sich mit den Interna von PHP auseinandersetzen zu müssen.

  • Vorteil 2: Unterstützt alle wichtigen PHP-Funktionen

Mit PHP-CPP können Sie Variablen genauso einfach handhaben wie mit normalen PHP-Skripten und Arrays , Funktionen, Objekte, Klassen, Schnittstellen, Ausnahmen und Namespaces. Darüber hinaus können Sie alle Funktionen von C++ nutzen, einschließlich Threads, Lambdas und asynchroner Programmierung.

  • Vorteil drei: Unterstützt PHP 5.5.X, PHP7, obwohl es zwei Framework-Codes gibt, sind die Schnittstellen gleich. Wenn Sie also eine PHP-Erweiterung entwickeln möchten, die mit mehreren Versionen kompatibel ist, kostet es Sie nicht viel zusätzliche Zeit, sie kompatibel zu machen.

    5. Wettbewerb der Hello-World-Erweiterungsquellcodes verschiedener Entwicklungs-Frameworks

    Die Hello-World-Erweiterungsquellcodes der einzelnen Frameworks sind unten aufgeführt. Anhand der Länge und Komplexität des Quellcodes können Sie ein intuitives Gefühl haben.
    Der von ext-skel generierte Quellcode der C-Erweiterung ist offensichtlich sehr schlecht lesbar und äußerst schwer zu verstehen.
    Der erweiterte Quellcode von Zephir ist der PHP-Syntax am ähnlichsten und lässt sich am einfachsten starten, es ist jedoch schwierig, ausgereiften C/C++-Bibliothekscode hinzuzufügen.
    Die Quellcodestile von PHP-X und PHP CPP sind sehr ähnlich. Beide sind Standard-C++-Sprachen und leicht zu verstehen. Es ist nicht schwer vorstellbar, dass diese beiden Methoden zur Entwicklung von Erweiterungen am besten geeignet sein müssen, da wir nicht nur die C++-Kapselung verwenden können, um die Entwicklung zu vereinfachen, sondern auch verschiedene ausgereifte C++-Bibliotheken auf dem Markt direkt aufrufen können, um uns zu bedienen.

    Hello World-Quellcode von Ext-Skel

    #ifdef HAVE_CONFIG_H
    #include "config.h"
    #endif
    
    #include "php.h"
    #include "php_ini.h"
    #include "ext/standard/info.h"
    #include "php_helloworld.h"
    
    static int le_helloworld;
    
    PHP_FUNCTION(confirm_helloworld_compiled)
    {
        char *arg = NULL;
        int arg_len, len;
        char *strg;
    
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
            return;
        }
    
        len = spprintf(&strg, 0, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "helloworld", arg);
        RETURN_STRINGL(strg, len, 0);
    }
    
    PHP_MINIT_FUNCTION(helloworld)
    {
        return SUCCESS;
    }
    
    PHP_MSHUTDOWN_FUNCTION(helloworld)
    {
    
        return SUCCESS;
    }
    
    PHP_RINIT_FUNCTION(helloworld)
    {
        return SUCCESS;
    }
    
    PHP_RSHUTDOWN_FUNCTION(helloworld)
    {
        return SUCCESS;
    }
    
    PHP_MINFO_FUNCTION(helloworld)
    {
        php_info_print_table_start();
        php_info_print_table_header(2, "helloworld support", "enabled");
        php_info_print_table_end();
    
    }
    
    const zend_function_entry helloworld_functions[] = {
        PHP_FE(confirm_helloworld_compiled,    NULL)        /* For testing, remove later. */
        PHP_FE_END    /* Must be the last line in helloworld_functions[] */
    };
    
    zend_module_entry helloworld_module_entry = {
        STANDARD_MODULE_HEADER,
        "helloworld",
        helloworld_functions,
        PHP_MINIT(helloworld),
        PHP_MSHUTDOWN(helloworld),
        PHP_RINIT(helloworld),        /* Replace with NULL if there's nothing to do at request start */
        PHP_RSHUTDOWN(helloworld),    /* Replace with NULL if there's nothing to do at request end */
        PHP_MINFO(helloworld),
        PHP_HELLOWORLD_VERSION,
        STANDARD_MODULE_PROPERTIES
    };
    
    #ifdef COMPILE_DL_HELLOWORLD
    ZEND_GET_MODULE(helloworld)
    #endif

    Hello World-Quellcode von Zephir

    namespace Test;
    class Hello
    {
        public function say()
        {
            echo "Hello World!";
        }
    }

    Der Hallo-Welt-Quellcode von PHP-X

    #include <phpx.h>
    using namespace std;
    using namespace php;
    
    //声明函数
    PHPX_FUNCTION(say_hello);
    
    //导出模块
    PHPX_EXTENSION()
    {
        Extension *ext = new Extension("hello-world", "0.0.1");
        ext->registerFunction(PHPX_FN(say_hello));
        return ext;
    }
    
    //实现函数
    PHPX_FUNCTION(say_hello)
    {
        echo("hello world");
    }

    Der Hallo-Welt-Quellcode von PHP CPP

    #include <phpcpp.h>
    void say_hello(Php::Parameters &params)
    {
        Php::out << "hello world" << std::endl;
    }
    extern "C" {
        PHPCPP_EXPORT void *get_module() 
        {
            static Php::Extension extension("helloworld", "1.0");
            extension.add("say_hello", say_hello);
            return extension;
        }
    }

    Referenzen

    Anleitung Entwickeln Sie schnell eine PHP-Erweiterung auf Basis von PHP-X
    PHP-X Chinesisch-Hilfe
    5-minütiger Schnellstart zur PHP-Erweiterungsentwicklung
    zephir-chinesische Website
    zephir-englische offizielle Website
    zephir-Installation und Demonstration Entwicklung
    phpcpp Englische offizielle Website
    phpcpp Englische Hilfe
    phpcpp Chinesische Hilfe

    Verwandte Empfehlungen:

    Zusammenfassung des PHP-Erweiterungsentwicklungs-Tutorials

Das obige ist der detaillierte Inhalt vonVergleich und Einführung verwandter Entwicklungstechnologien für die PHP-Erweiterungsentwicklung 1. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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