指定参数
最后更新于:2022-04-02 02:33:14
[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
Php::Value sum_everything(Php::Parameters ¶meters)
{
int result = 0;
for (auto ¶m : parameters) result += param;
return result;
}
extern "C" {
PHPCPP_EXPORT void *get_module() {
static Php::Extension extension("my_extension", "1.0");
extension.add("sum_everything");
return extension;
}
}
```
```
("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 ;
void example1(Php::Parameters ¶ms) { Php::Value time = params[0]; ... }
void example2(Php::Parameters ¶ms) { Php::Value time = params[0]; ... }
extern "C" {
PHPCPP_EXPORT void *get_module() {
static Php::Extension myExtension("my_extension", "1.0");
myExtension.add("example1", { Php::ByVal("time", "DateTime", false); });
myExtension.add("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
#include
void example(Php::Parameters ¶ms)
{
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", {
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
```
';