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(要两个参数,前者是指针,后者是接受的长度)

 

4s是特殊,来举例:

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,而不是引用,则进行强制分离。新的zvalis_ref_gc=0 and refcount == 1?????????????????????????????????????????????????????????????????????????????????????}

 

 

If(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC ,

“s | s”,&name,&name_len,&greeting , &greeting_len ) == Faui

 

 

?>

 

这个未完待续,日后做处理。。。。。。。。。。。。。

 

posted @ 2017-05-07 16:32  freebirds  阅读(146)  评论(0)    收藏  举报