The content of this article is to share with you the development of PHP extensions and the development of our own interface classes. It has a certain reference value. Friends in need can refer to it
PHP extensions are a must for advanced PHP programmers One of the skills to understand is that for a beginning PHP extension developer, how can he develop a mature extension and enter the advanced field of PHP development? This series of development tutorials will take you step by step from entry to advanced stages.
This tutorial series is developed under Linux (centos is recommended), the PHP version is 5.6, and it is assumed that you have certain Linux operating experience and C/C foundation.
If you have any questions and need to communicate, please join the QQ technical exchange group 32550793 to communicate with me.
The previous chapter demonstrated how to export ordinary functions in PHP extensions. This chapter introduces how to export classes in extensions. Enables PHP to directly access C classes in extensions in scripts.
The following is an extended skeleton code developed using PHP-CPP. Compilation can export a demonstration C class.
The source code of the project can be found on github. You can use the git client or open the URL to package and download.
# git clone https://github.com/elvisszhang/phpcpp_counter.git
Now our class name is Counter, the syntax for registering the class in the extension is like this
Php::Class<Counter> counter("Counter");
There is a function called increment in the Counter class, and the following syntax tells the extension to allow the php script to access this function.
counter.method<&Counter::increment> ("increment");
The C source code of main.cpp is as follows.
#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; } }
The PHP test code corresponding to the above example is as follows.
<?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; ?>
The output information after running the above php code is as follows.
result of increment() = 1 result of increment() = 2 result of decrement() = 1 result of value() = 1 result of gettime() = 1523363778
Functions of extension classes must be written according to certain specifications, and the names and types of return values and parameters are all specified. Otherwise it will not be recognized by the PHP script.
The most common are the following four function styles. The styles of ordinary functions in the previous chapter are actually similar. The usage of return values and parameters are exactly the same, so I won’t go into details.
// 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);
In addition, if the function has the modifier const. There are also 4 different styles below.
void YourClass::example5() const; void YourClass::example6(Php::Parameters ¶ms) const; Php::Value YourClass::example7() const; Php::Value YourClass::example8(Php::Parameters ¶ms) const;
PHP-CPP Help: classes-and-objects
PHP extension is a must for advanced PHP programmers One of the skills to understand is that for a beginning PHP extension developer, how can he develop a mature extension and enter the advanced field of PHP development? This series of development tutorials will take you step by step from entry to advanced stages.
This tutorial series is developed under Linux (centos is recommended), the PHP version is 5.6, and it is assumed that you have certain Linux operating experience and C/C foundation.
If you have any questions and need to communicate, please join the QQ technical exchange group 32550793 to communicate with me.
The previous chapter demonstrated how to export ordinary functions in PHP extensions. This chapter introduces how to export classes in extensions. Enables PHP to directly access C classes in extensions in scripts.
Related recommendations:
Comparison and introduction of related development technologies for PHP extension development
Writing the first extension for PHP extension development hello world
PHP extension development to develop our own mathematical function library
The above is the detailed content of PHP extension development: developing our own interface class. For more information, please follow other related articles on the PHP Chinese website!