Maison  >  Article  >  développement back-end  >  Développement d'extensions PHP : développer notre propre classe d'interface

Développement d'extensions PHP : développer notre propre classe d'interface

不言
不言original
2018-04-13 16:23:161741parcourir

Le contenu de cet article est de partager avec vous le développement d'extensions PHP et le développement de nos propres classes d'interface. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer

Les extensions PHP sont une référence. indispensable pour les programmeurs PHP avancés. L'une des compétences à comprendre est que pour un développeur d'extensions PHP débutant, comment peut-il développer une extension mature et entrer dans le domaine avancé du développement PHP ? Cette série de didacticiels de développement vous guidera étape par étape, de l'entrée aux étapes avancées.
Cette série de didacticiels est développée sous Linux (centos est recommandé), la version PHP est 5.6 et il est supposé que vous avez une certaine expérience d'exploitation Linux et des bases c/c++.
Si vous avez des questions et avez besoin de communiquer, veuillez rejoindre le groupe d'échange technique QQ 32550793 pour communiquer avec moi.

Le chapitre précédent a montré comment exporter des fonctions ordinaires dans des extensions PHP. Ce chapitre présente comment exporter des classes dans des extensions. Permet à PHP d'accéder directement aux classes C++ dans les extensions des scripts.

1. Comment exporter une classe C++ dans une extension PHP

Ce qui suit est un code squelette étendu développé à l'aide de PHP-CPP Compilation pouvant exporter une classe C++ de démonstration.

Le code source du projet peut être trouvé sur github. Vous pouvez utiliser le client git ou ouvrir l'URL pour empaqueter et télécharger.

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

Maintenant, notre nom de classe est Counter, et la syntaxe pour enregistrer une classe dans l'extension est comme ceci

Php::Class7291a602fab93c84dabbc8532a6a1d6e counter("Counter");

Il existe une fonction appelée incrément dans la classe Counter, qui indique l'extension via la syntaxe suivante Rendre cette fonction accessible aux scripts php.

counter.method78b504f69415d8c8003c96fef61971c4 ("increment");

Le code source C++ de main.cpp est le suivant.

#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;
    }
}

Le code de test PHP correspondant à l'exemple ci-dessus est le suivant.

<?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;
?>

Les informations de sortie après avoir exécuté le code php ci-dessus sont les suivantes.

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

2. Styles pris en charge par les fonctions ordinaires des classes d'extension

Les fonctions des classes d'extension doivent être écrites selon certaines spécifications. Les noms et types de valeurs de retour et de paramètres sont tous. précisé. Sinon il ne sera pas reconnu par le script PHP.

Les plus courants sont les quatre styles de fonctions suivants. Les styles des fonctions ordinaires du chapitre précédent sont en fait similaires. L'utilisation des valeurs de retour et des paramètres est exactement la même, je n'entrerai donc pas dans les détails. détails.

// 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);

De plus, si la fonction a le modificateur const. Il existe également 4 styles différents ci-dessous.

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. Références

Aide PHP-CPP : classes-et-objets


L'extension PHP est un programme PHP avancé. L'une des compétences que les développeurs doivent comprendre. Pour un développeur d'extensions PHP débutant, comment peut-il développer une extension mature et entrer dans le domaine avancé du développement PHP ? Cette série de didacticiels de développement vous guidera étape par étape, de l'entrée aux étapes avancées.
Cette série de didacticiels est développée sous Linux (centos est recommandé), la version PHP est 5.6 et il est supposé que vous avez une certaine expérience d'exploitation Linux et des bases c/c++.
Si vous avez des questions et avez besoin de communiquer, veuillez rejoindre le groupe d'échange technique QQ 32550793 pour communiquer avec moi.


Le chapitre précédent a montré comment exporter des fonctions ordinaires dans des extensions PHP. Ce chapitre présente comment exporter des classes dans des extensions. Permet à PHP d'accéder directement aux classes C++ dans les extensions des scripts.

Recommandations associées :

Comparaison et introduction des technologies de développement associées pour le développement d'extensions PHP

Écriture de la première extension pour le développement d'extensions PHP bonjour monde

Développement d'extensions PHP pour développer notre propre bibliothèque de fonctions mathématiques


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn