File tree Expand file tree Collapse file tree 1 file changed +19
-2
lines changed Expand file tree Collapse file tree 1 file changed +19
-2
lines changed Original file line number Diff line number Diff 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上一节介绍了如何在内部函数中解析参数,这里还有一种情况没有讲到,那就是引用传参:
You can’t perform that action at this time.
0 commit comments