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.
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::Class<Counter> 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.method<&Counter::increment> ("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 'result of increment() = '. $counter->increment() . PHP_EOL; echo 'result of increment() = '. $counter->increment() . PHP_EOL; echo 'result of decrement() = '. $counter->decrement() . PHP_EOL; echo 'result of value() = '. $counter->value() . PHP_EOL; echo 'result of gettime() = '. 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
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 ¶ms); Php::Value YourClass::example3(); Php::Value YourClass::example4(Php::Parameters ¶ms);
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 ¶ms) const; Php::Value YourClass::example7() const; Php::Value YourClass::example8(Php::Parameters ¶ms) const;
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 :
É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!