Skip to content

Commit 5ad155f

Browse files
committed
finish function
1 parent cd5e844 commit 5ad155f

File tree

3 files changed

+7
-4
lines changed

3 files changed

+7
-4
lines changed

3/function_implement.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ typedef struct _zend_arg_info {
9393
zend_uchar type_hint; //显式声明的参数类型,比如(array $param_1)
9494
zend_uchar pass_by_reference; //是否引用传参,参数前加&的这个值就是1
9595
zend_bool allow_null; //是否允许为NULL,注意:这个值并不是用来表示参数是否为必传的
96-
zend_bool is_variadic; //是否为可变参数,即...用法,与golang的用法相同,5.6以上新增的一个用法
96+
zend_bool is_variadic; //是否为可变参数,即...用法,与golang的用法相同,5.6以上新增的一个用法:function my_func($a, ...$b){...}
9797
} zend_arg_info;
9898
```
9999
每个参数都有一个上面的结构,所有参数的结构保存在`zend_op_array.arg_info`数组中,这里有一个地方需要注意:`zend_op_array->arg_info`数组保存的并不全是输入参数,如果函数声明了返回值类型则也会为它创建一个`zend_arg_info`,这个结构在arg_info数组的第一个位置,这种情况下`zend_op_array->arg_info`指向的实际是数组的第二个位置,返回值的结构通过`zend_op_array->arg_info[-1]`读取,这里先单独看下编译时的处理:

README.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,12 @@
6060
* [7.5 运行时配置](7/conf.md)
6161
* [7.5.1 全局变量](7/conf.md)
6262
* [7.5.2 ini配置](7/conf.md)
63-
* 7.6 函数
64-
* [7.6.1 内部函数](7/func.md)
65-
* 7.6.2 调用用户函数
63+
* [7.6 函数](7/func.md)
64+
* <a href="7/func.md#761-内部函数注册">7.6.1 内部函数注册</a>
65+
* <a href="7/func.md#762-函数参数解析">7.6.2 函数参数解析</a>
66+
* <a href="7/func.md#763-引用传参">7.6.3 引用传参</a>
67+
* <a href="7/func.md#764-函数返回值">7.6.4 函数返回值</a>
68+
* <a href="7/func.md#765-函数调用">7.6.5 函数调用</a>
6669
* 7.7 变量的操作
6770
* 7.9 面向对象
6871
* 7.6.1 扩展中创建对象

img/internal_func_param.png

3.5 KB
Loading

0 commit comments

Comments
 (0)