/** * cppclassinphp.cpp * @author Jasper van Eck * * An example file to show the working of using a C++ class in PHP. */ #include "includeMyCustomClass.h" /** * Namespace to use */ using namespace std; class MyCustomClass : public Php::Base { private: int _x; public: MyCustomClass() { _x = 3; std::cout << "MyCustomClass::MyCustomClass" << std::endl; std::cout << _x << std::endl; } virtual ~MyCustomClass() { std::cout << "MyCustomClass::~MyCustomClass" << std::endl; } virtual void __construct() { std::cout << "MyCustomClass::__construct" << std::endl; } virtual void __destruct() { std::cout << "MyCustomClass::__destruct" << std::endl; } void myMethod(Php::Parameters ¶ms) { std::cout << "myMethod is called." << std::endl; std::cout << "_x: " << _x << std::endl; _x = params[0]; std::cout << "New _x" << _x << std::endl; Php::Value v = params[0]; std::cout << "contains: " << v.contains("bla") << std::endl; std::cout << "value: " << v["bla"] << std::endl; v["something"] = "something else"; } }; void myFunction(Php::Parameters ¶ms) { std::cout << "regular function" << std::endl; } // Symbols are exported according to the "C" language extern "C" { // export the "get_module" function that will be called by the Zend engine PHPCPP_EXPORT void *get_module() { // create extension static Php::Extension extension("Cpp_classes_in_php","1.0"); // create a namespace too Php::Namespace ns("MyNamespace"); // add custom function extension.add("myFunction", myFunction, { }); // we are going to define a class Php::Class customClass("MyClass"); // add methods to it customClass.add("myMethod", &MyCustomClass::myMethod, Php::Final, {}); customClass.add("property1", "prop1"); customClass.add("property2", "prop2", Php::Protected); // add the class to the extension extension.add(customClass); // add the namespace to the extension extension.add(ns); // return the extension module return extension.module(); } }