Heim  >  Artikel  >  Backend-Entwicklung  >  Entwicklung einer PHP-Erweiterung: Entwicklung unserer eigenen Schnittstellenklasse

Entwicklung einer PHP-Erweiterung: Entwicklung unserer eigenen Schnittstellenklasse

不言
不言Original
2018-04-13 16:23:161680Durchsuche

Der Inhalt dieses Artikels besteht darin, die Entwicklung von PHP-Erweiterungen und die Entwicklung unserer eigenen Schnittstellenklassen mitzuteilen. Er hat einen gewissen Referenzwert.

PHP-Erweiterungen sind ein Ein Muss für fortgeschrittene PHP-Programmierer. Eine der Fähigkeiten, die es zu verstehen gilt, ist, dass ein beginnender PHP-Erweiterungsentwickler eine ausgereifte Erweiterung entwickeln und in den fortgeschrittenen Bereich der PHP-Entwicklung einsteigen kann. 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.

Im vorherigen Kapitel wurde gezeigt, wie man gewöhnliche Funktionen in PHP-Erweiterungen exportiert. Dieses Kapitel stellt vor, wie man Klassen in Erweiterungen exportiert. Ermöglicht PHP den direkten Zugriff auf C++-Klassen in Erweiterungen in Skripten.

1. So exportieren Sie eine C++-Klasse in eine PHP-Erweiterung

Das Folgende ist ein erweiterter Skelettcode, der mit der PHP-CPP-Kompilierung entwickelt wurde, um eine Demonstrations-C++-Klasse zu exportieren.

Der Quellcode des Projekts ist auf Github zu finden. Sie können den Git-Client verwenden oder die URL zum Packen und Herunterladen öffnen.

# git clone https://github.com/elvisszhang/phpcpp_counter.git

Jetzt lautet unser Klassenname Counter, und die Syntax zum Registrieren einer Klasse in der Erweiterung lautet wie folgt

Php::Class7291a602fab93c84dabbc8532a6a1d6e counter("Counter");

In der Counter-Klasse gibt es eine Funktion namens Inkrement, die teilt der Erweiterung mit der folgenden Syntax mit, diese Funktion für PHP-Skripte zugänglich zu machen.

counter.method78b504f69415d8c8003c96fef61971c4 ("increment");

Der C++-Quellcode von main.cpp lautet wie folgt.

#include <phpcpp.h>
#include <time.h>

//扩展的导出类 Counter
class Counter : public Php::Base
{
private:
    int _value = 0;
public:
    Counter() = default;
    virtual ~Counter() = default;
    //类的普通成员函数
    Php::Value increment() { return ++_value; }
    Php::Value decrement() { return --_value; }
    Php::Value value() const { return _value; }
    //类的静态成员函数
    static Php::Value gettime() {return time();}
};

//告诉编译器get_module是个纯C函数
extern "C" {
    //get_module是扩展的入口函数
    PHPCPP_EXPORT void *get_module() {
        static Php::Extension myExtension("counter", "1.0.0");
        
        //初始化导出类
        Php::Class<Counter> counter("Counter");
        
        //注册导出类的可访问普通函数
        counter.method<&Counter::increment> ("increment");
        counter.method<&Counter::decrement> ("decrement");
        counter.method<&Counter::value> ("value");
        
        //注册导出类的可访问静态函数
        counter.method<&Counter::gettime>("gettime");

        //注册导出类,使用右值引用方式,优化资源使用
        myExtension.add(std::move(counter));
        
        //返回扩展对象指针
        return myExtension;
    }
}

Der dem obigen Beispiel entsprechende PHP-Testcode lautet wie folgt.

<?php
$counter = new Counter;
echo &#39;result of increment() = &#39;. $counter->increment() . PHP_EOL;
echo &#39;result of increment() = &#39;. $counter->increment() . PHP_EOL;
echo &#39;result of decrement() = &#39;. $counter->decrement() . PHP_EOL;
echo &#39;result of value() = &#39;. $counter->value() . PHP_EOL;
echo &#39;result of gettime() = &#39;. Counter::gettime() . PHP_EOL;
?>

Die Ausgabeinformationen nach dem Ausführen des obigen PHP-Codes lauten wie folgt.

result of increment() = 1
result of increment() = 2
result of decrement() = 1
result of value() = 1
result of gettime() = 1523363778

2. Stile, die von gewöhnlichen Funktionen von Erweiterungsklassen unterstützt werden

Funktionen von Erweiterungsklassen müssen gemäß bestimmten Spezifikationen geschrieben werden. Die Namen und Typen der Rückgabewerte und Parameter sind alle angegeben. Andernfalls wird es vom PHP-Skript nicht erkannt.

Am häufigsten sind die folgenden vier Funktionsstile. Die Verwendung von Rückgabewerten und Parametern im vorherigen Kapitel ist genau gleich, daher werde ich nicht darauf eingehen Details.

// signatures of supported regular methods
void        YourClass::example1();
void        YourClass::example2(Php::Parameters &params);
Php::Value  YourClass::example3();
Php::Value  YourClass::example4(Php::Parameters &params);

Außerdem, wenn die Funktion den Modifikator const hat. Unten sind auch 4 verschiedene Stile aufgeführt.

void        YourClass::example5() const;
void        YourClass::example6(Php::Parameters &params) const;
Php::Value  YourClass::example7() const;
Php::Value  YourClass::example8(Php::Parameters &params) const;

3. Referenzen

PHP-CPP-Hilfe: Klassen und Objekte


PHP-Erweiterung ist ein erweitertes PHP-Programm Eine der Fähigkeiten, die Entwickler 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.


Das vorherige Kapitel zeigte, wie man gewöhnliche Funktionen in PHP-Erweiterungen exportiert. Dieses Kapitel stellt vor, wie man Klassen in Erweiterungen exportiert. Ermöglicht PHP den direkten Zugriff auf C++-Klassen in Erweiterungen in Skripten.

Verwandte Empfehlungen:

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

Schreiben der ersten Erweiterung für die PHP-Erweiterungsentwicklung Hallo Welt

PHP-Erweiterungsentwicklung zur Entwicklung unserer eigenen mathematischen Funktionsbibliothek


Das obige ist der detaillierte Inhalt vonEntwicklung einer PHP-Erweiterung: Entwicklung unserer eigenen Schnittstellenklasse. 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