ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] ## 概述 ByVal ``` // 第二参数为 Type 类型 ByVal(const char *name, Type type = Type::Null, bool required = true) // 第二参数输入字符串 为类名 ByVal(const char *name, const char *classname, bool nullable = false, bool required = true) ByVal(const ByVal &argument) ``` Php::Type ``` Php::Type::Null Php::Type::Numeric Php::Type::Float Php::Type::Bool Php::Type::Array Php::Type::Object Php::Type::String Php::Type::Resource Php::Type::Constant Php::Type::ConstantArray Php::Type::Callable ``` ### 接收动态参数 - Php :: Parameters类不过是一个用Php :: Value对象填充的std :: vector,因此您可以对其进行迭代。 - 我们使用新的C ++ 11方法,并且使用new-for-C ++ 11“ auto”关键字要求编译器找出参数向量中存储了哪种类型的变量 ``` #include <phpcpp.h> Php::Value sum_everything(Php::Parameters &parameters) { int result = 0; for (auto &param : parameters) result += param; return result; } extern "C" { PHPCPP_EXPORT void *get_module() { static Php::Extension extension("my_extension", "1.0"); extension.add<sum_everything>("sum_everything"); return extension; } } ``` ``` <?php echo(myFunction(10,"100",20)."\n"); //130 ``` ### 接收指定参数 main.cpp ``` ... void example(Php::Parameters &params) { } extern "C" { PHPCPP_EXPORT void *get_module() { static Php::Extension myExtension("my_extension", "1.0"); myExtension.add<example>("example", { Php::ByVal("a", Php::Type::Numeric), Php::ByVal("b", "ExampleClass"), // 必须是 ExampleClass 类 Php::ByVal("c", "OtherClass") // 必须是 OtherClass 类 }); return myExtension; } } ``` main.php ``` class ExampleClass{ } class OtherClass{} // 第一参数 必须为整数,不然就报错 // 第二参数 必须是ExampleClass 类 // 第三参数 必须是 OtherClass 类 example(1,new ExampleClass(),new OtherClass()); ``` ### 参数允许为空 ``` #include <phpcpp.h>; void example1(Php::Parameters &params) { Php::Value time = params[0]; ... } void example2(Php::Parameters &params) { Php::Value time = params[0]; ... } extern "C" { PHPCPP_EXPORT void *get_module() { static Php::Extension myExtension("my_extension", "1.0"); myExtension.add<example1>("example1", { Php::ByVal("time", "DateTime", false); }); myExtension.add<example2>("example2", { Php::ByVal("time", "DateTime", true); }); return myExtension; } } ``` main.php ``` // 不允许为空 function example1(DateTime $time) { ... } // 允许为空 function example1(DateTime $time = null) { Php::Value time = params[0]; ... } ``` ### 引用参数 ``` #include <phpcpp.h> #include <iostream> void example(Php::Parameters &params) { Php::Value temp=params[0]; params[0]=params[1]; params[1]=temp; } extern "C" { PHPCPP_EXPORT void *get_module() { static Php::Extension myExtension("my_extension", "1.0"); myExtension.add<example>("example", { Php::ByRef("a", Php::Type::Numeric), Php::ByRef("b", Php::Type::Numeric), }); return myExtension; } } ``` main.php ``` $a = 1; $b = 2; example($a, $b); print_r($a);//2 print_r($b);//1 ```