diff options
Diffstat (limited to 'tests/cpp/main.cpp')
-rw-r--r-- | tests/cpp/main.cpp | 58 |
1 files changed, 53 insertions, 5 deletions
diff --git a/tests/cpp/main.cpp b/tests/cpp/main.cpp index 2928f60..db2416d 100644 --- a/tests/cpp/main.cpp +++ b/tests/cpp/main.cpp @@ -8,9 +8,9 @@ #include <phpcpp.h> // Test includes -#include "include/ValueIterator.h" -#include "include/MyCustomClass.h" -#include "include/variables.h" +#include "h/ValueIterator.h" +#include "h/Classes_and_objects.h" +#include "h/variables.h" @@ -33,7 +33,14 @@ extern "C" // add the interface to the extension //extension.add(interface); + + + + /** + * Classes and objects + * + */ // we are going to define a class Php::Class<TestBaseClass::MyCustomClass> customClass("TestBaseClass\\MyClass"); @@ -42,9 +49,38 @@ extern "C" customClass.property("property1", "prop1"); customClass.property("property2", "prop2", Php::Protected); + customClass.property("CONSTANT1", "some string", Php::Const); + customClass.property("EXP", 2.718281828459, Php::Const); + customClass.property("CONSTANT2", -2582341, Php::Const); + customClass.property("CONSTANT1", true, Php::Const); + // add the class to the extension extension.add(customClass); + // Comparable + extension.add( Php::Class<TestBaseClass::Comparable>("TestBaseClass\\Comparable") ); + + + // test static functions + // + // description of the class so that PHP knows which methods are accessible + Php::Class<TestBaseClass::testStaticPubClass> ClassWithStatic("TestBaseClass\\ClassWithStatic"); + // register the testStaticPubClass::staticMethod to be a static method callable from PHP + ClassWithStatic.method("static1", &TestBaseClass::testStaticPubClass::staticMethod); + // regular functions have the same signatures as static methods. So nothing forbids you to register a normal function as static method too + ClassWithStatic.method("static2", TestBaseClass::testStaticRegFunc); + // and even static methods from completely different classes have the same function signature and can thus be registered + ClassWithStatic.method("static3", &TestBaseClass::testStaticPrivClass::staticMethod); + // add the class to the extension + extension.add(std::move(ClassWithStatic)); + // In fact, because a static method has the same signature + // as a regular function, you can also register static + // C++ methods as regular global PHP functions + extension.add("TestBaseClass\\staticFun1", &TestBaseClass::testStaticPrivClass::staticMethod); + + + + /** * tests for Iterators * @@ -52,22 +88,34 @@ extern "C" // add function to extension //extension.add("TestValueIterator\\loopValue", TestValueIterator::loopValue/*, { extension.add("TestValueIterator\\loopValue", TestValueIterator::loopValue); + extension.add("TestValueIterator\\loopArray", TestValueIterator::loopArray); /** * tests for variables * */ + // create a nested namespace extension.add("TestVariables\\process_globals", TestVariables::process_globals); extension.add("TestVariables\\get_complex_array", TestVariables::get_complex_array); extension.add("TestVariables\\value_types", TestVariables::value_types); extension.add("TestVariables\\scalar_store", TestVariables::scalar_store); extension.add("TestVariables\\value_casting", TestVariables::value_casting); + extension.add("TestVariables\\value_cast2double", TestVariables::value_cast2double); extension.add("TestVariables\\value_cast2str", TestVariables::value_cast2str); extension.add("TestVariables\\overloaded_op", TestVariables::overloaded_op); extension.add("TestVariables\\value_arrays", TestVariables::value_arrays); - extension.add("TestVariables\\value_object1", TestVariables::value_object1); - extension.add("TestVariables\\value_object2", TestVariables::value_object2); + extension.add("TestVariables\\value_object1", TestVariables::value_object1); + extension.add("TestVariables\\value_object2", TestVariables::value_object2); + extension.add("TestVariables\\fnFromUserSpace", TestVariables::fnFromUserSpace); + extension.add("TestVariables\\fnFromUserSpace2", TestVariables::fnFromUserSpace2); + extension.add("TestVariables\\fnCallback", TestVariables::fnCallback); + + + + // A sample class, with methods to cast objects to scalars + Php::Class<TestVariables::Obj2Scalar> cObj2Scalar("TestVariables\\Obj2Scalar"); + extension.add(std::move(cObj2Scalar)); |