Skip to content

Commit 0a07512

Browse files
committed
update
1 parent 5a53c46 commit 0a07512

File tree

1 file changed

+25
-2
lines changed

1 file changed

+25
-2
lines changed

7/func.md

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -311,13 +311,36 @@ if(zend_parse_parameters(ZEND_NUM_ARGS(), "C", &ce) == FAILURE){
311311
RETURN_FALSE;
312312
}
313313
```
314-
__(9)通用解析:z__
314+
__(9)callable:f__
315+
316+
callable指函数或成员方法,如果参数是函数名称字符串、array(对象/类,成员方法),则可以通过"f"标识符解析出`zend_fcall_info`结构,这个结构是调用函数、成员方法时的唯一输入。
317+
```c
318+
zend_fcall_info callable; //注意,这两个结构不能是指针
319+
zend_fcall_info_cache call_cache;
320+
321+
if(zend_parse_parameters(ZEND_NUM_ARGS(), "f", &callable, &call_cache) == FAILURE){
322+
RETURN_FALSE;
323+
}
324+
```
325+
函数调用:
326+
```php
327+
my_func_1("func_name");
328+
329+
my_func_1(array('class_name', 'static_method'));
330+
331+
my_func_1(array($object, 'method'));
332+
```
333+
解析出`zend_fcall_info`后就可以通过`zend_call_function()`调用函数、成员方法了,提供"f"解析到`zend_fcall_info`的用意是简化函数调用的操作,否则需要我们自己去查找函数、检查是否可被调用等工作,关于这个结构稍后介绍函数调用时再作详细说明。
334+
335+
__(10)通用解析:z__
315336

316337
"z"表示按参数实际类型解析,比如参数为字符串就解析为字符串,参数为数组就解析为数组,这种实际就是将zend_execute_data上的参数地址拷贝到目的变量了,没有做任何转化。
317338

318339
"z!"与字符串用法相同。
319340

320-
__(10)其它标识符__
341+
__(11)其它标识符__
342+
343+
除了上面介绍的这些表示符,以外还有几个有特殊用法的标识符:"|"、"+"、"*",它们并不是用来表示数据类型的。
321344

322345
#### 7.6.1.3 函数返回值
323346

0 commit comments

Comments
 (0)