Skip to content

Commit eb2f96f

Browse files
committed
fix error
1 parent 42c82f6 commit eb2f96f

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

7/func.md

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -376,8 +376,25 @@ my_func_1(array($object, 'method'));
376376

377377
#### 7.6.2.11 其它标识符
378378
除了上面介绍的这些解析符号以外,还有几个有特殊用法的标识符:"|"、"+"、"*",它们并不是用来表示某种数据类型的。
379-
* __|:__ 表示此后的参数为可选参数,可以不传,比如解析规则为:"al|b",则可以传2个或3个参数,如果是:"alb",则必须传3个,否则将报错;
380-
* __+/*__ 用于可变参数,注意这里与PHP函数...的用法不太一样,PHP中可以把函数最后一个参数前加...,表示调用时可以传多个参数,这些参数都会插入...参数的数组中,"*/+"也表示这个参数是可变的,但内核中只能接收一个值,即使传了多个后面那些也解析不到,"*"、"+"的区别在于"*"表示可以不传可变参数,而"+"表示可变参数至少有一个。
379+
* __|:__ 表示此后的参数为可选参数,可以不传,比如解析规则为:"al|b",则可以传2个或3个参数,如果是:"alb",则必须传3个,否则将报错
380+
* __+、*__ 用于可变参数,`+、*`的区别在于 * 表示可以不传可变参数,而 + 表示可变参数至少有一个。可变参数将被解析到zval数组,可以通过一个整形参数,用于获取具体的数量,例如:
381+
```c
382+
PHP_FUNCTION(my_func_1)
383+
{
384+
zval *args;
385+
int argc;
386+
387+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "+", &args, &argc) == FAILURE) {
388+
return;
389+
}
390+
//...
391+
}
392+
```
393+
argc获取的就是可变参数的数量,args为参数数组,指向第一个参数,可以通过args[i]获取其它参数,比如这样传参:
394+
```php
395+
my_func_1(array(), 1, false, "ddd");
396+
```
397+
那么传入的4个参数就可以在解析后通过args[0]、args[1]、args[2]、args[3]获取。
381398

382399
### 7.6.3 引用传参
383400
上一节介绍了如何在内部函数中解析参数,这里还有一种情况没有讲到,那就是引用传参:

0 commit comments

Comments
 (0)