php内部机制对于参数的研究
php的参数研究
源码:对于参数的研究,主要就是这个函数:zend_parse_parameters();
1:这个函数的第一个参数是:ZEND_NUM_ARGS() TSRMLS_CC, 其中二者之间有一空格,并且ZEND_NUM_ARGS()代表的就是参数的个数。
2:下一个函数是格式化的字符串,这个就像是printf()函数的第一个参数。
b: ----------------------- Boolean
l: ------------------------ Integer
d:------------------------ float
s:------------------------ String
r:------------------------ Resource(资源)???????????????
a:----------------------- Array
o:----------------------- Object(对象)????????????????
f:------------------------ 函数类型
If(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC ,”l”,&foo)==FAILURE){
RETURN_NULL();
}
3:重重重重:我们不能够把long 转换为int,那样将会引发一些难以排查的bug。
//上面的是常用的????????????????????????
b: ----------------------- zend_bool
l: ------------------------ long
d:------------------------ double
r:------------------------- zval* 这是什么??????????????????
S:------------------------char* ,int(要两个参数,前者是指针,后者是接受的长度)
4:s是特殊,来举例:
If(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC ,
”s” , &name , &name_len)==failure)
5:如果我们要接收多个参数,那么直接罗列接收载体就好:
我们来举例:
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC ,
“s s” ,&name, &name_len, &greting, &greting_len
)==failure){ RETURN_NULL(); }
6 除了上面的定义的参数,我们还有其他的三个参数来接收函数参数的能力。
1 Type Modifier Meaning
他之前的参数都是必须的,但是他之后的参数都是非必须的。即是默认的。
首先看应用情况:我们经常用php是这样的,
<?php
//定义函数
Function sample_hello_world($name, $gre=’hello’){
echo $name.$gre;
}
//使用函数,通常有这么两种情况:
1 Sample_hello_world(‘Ginger’,’ms’);
2 sample_hello_world(‘Ginger’);
其中第一种有参数,第二种无参数。
这种情况的实现可是不好实现,不过你都这么努力了,你一定会懂得。
这种时候需要 “ | ”来实现。这个竖杠的参数以前是必须的,现在是可有可无的,
具体例子如下:
{???????????????????????????????????????????????????????????????????????????????????????????????
重重重重:中间有一个不懂得插曲:
1 如果在php里面传入一个null参数,则直接把其转成c语言里面的NULL,而不是封装成IS_NULL里面的zval。
2 如果传递过来的变量与别的变量共用一个zval,而不是引用,则进行强制分离。新的zval得is_ref_gc=0 and refcount == 1?????????????????????????????????????????????????????????????????????????????????????}
If(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC ,
“s | s”,&name,&name_len,&greeting , &greeting_len ) == Faui
?>
这个未完待续,日后做处理。。。。。。。。。。。。。
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号