锟斤拷锟斤拷锟侥憋拷写

锟斤拷锟斤拷锟� PHP 锟矫伙拷锟斤拷暮锟斤拷锟斤拷锟斤拷锟秸癸拷锟揭伙拷锟斤拷锟斤拷锟皆拷亍锟斤拷锟斤拷锟斤拷诖锟斤拷锟斤拷写锟斤拷锟斤拷锟斤拷锟斤拷锟秸故憋拷锟揭诧拷锟斤拷锟斤拷亩锟斤拷锟斤拷陆冢锟斤拷锟斤拷写蟛糠锟斤拷锟较拷锟斤拷诒锟叫达拷锟斤拷锟揭诧拷锟斤拷锟叫э拷摹锟�

锟斤拷一锟斤拷锟斤拷展锟斤拷锟接猴拷锟斤拷时锟斤拷锟斤拷锟斤拷锟斤拷使锟斤拷 ext_skel 锟脚憋拷锟斤拷锟斤拷锟斤拷始锟结构锟襟,可达拷锟斤拷一锟斤拷锟斤拷锟斤拷锟斤拷 C 锟斤拷锟斤拷锟斤拷实锟街o拷然锟斤拷锟斤拷锟斤拷展锟侥猴拷锟斤拷锟斤拷锟斤拷锟结供一锟斤拷锟斤拷凇锟斤拷锟斤拷锟斤拷锟节可猴拷锟斤拷一锟斤拷锟皆诧拷锟斤拷锟斤拷息锟结构锟斤拷指锟诫。 锟斤拷锟角憋拷锟斤拷要锟结供锟斤拷锟斤拷息锟斤拷锟斤拷锟角达拷锟斤拷锟斤拷懿锟斤拷锟斤拷锟斤拷没蚍祷锟揭伙拷锟斤拷锟斤拷茫锟斤拷锟斤拷峁╋拷锟� PHP 锟斤拷锟斤拷锟斤拷 API 锟斤拷锟绞碉拷锟斤拷息锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟叫o拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷为直锟接猴拷锟斤拷锟斤拷锟斤拷锟斤拷锟捷的o拷锟斤拷锟斤拷通锟斤拷一锟斤拷锟斤拷栈(stack)锟斤拷锟缴猴拷锟斤拷实锟斤拷——锟斤拷锟斤拷直锟斤拷锟斤拷为锟斤拷息源——锟斤拷锟叫核对★拷

Example #1 锟斤拷小锟侥斤拷锟斤拷一锟斤拷锟斤拷锟斤拷锟斤拷 PHP 锟斤拷展

/* {{{ proto void hello_world()
       Do nothing */
PHP_FUNCTION(hello_world)
{
}
/* }}} */

/* {{{ arginfo_hello_world */
ZEND_BEGIN_ARG_INFO(arginfo_hello_world, 0)
ZEND_END_ARG_INFO()
/* }}} */

/* {{{ demo_functions */
function_entry demo_functions[] = {
    PHP_FE(hello_world, arginfo_hello_world)
    {NULL, NULL, NULL}
}
/* }}} */

/* {{{ demo_module_enry */
zend_module_entry demo_module_entry = {
#if ZEND_MODULE_API_NO >= 20010901
    STANDARD_MODULE_HEADER,
#endif
    "demo",
    demo_functions,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
#if ZEND_MODULE_API_NO >= 20010901
    "1.0.0",
#en
    STANDARD_MODULE_PROPERTIES
}
/* }}} */

锟节达拷锟斤拷锟斤拷锟叫o拷锟斤拷锟斤拷锟姐看锟斤拷锟斤拷锟斤拷锟斤拷锟桔碉拷元锟截猴拷模锟斤拷峁癸拷锟侥o拷锟结构锟缴参硷拷 The zend_module structure锟斤拷

锟斤拷锟斤拷展锟侥碉拷一锟斤拷锟斤拷锟斤拷实锟绞碉拷实锟斤拷锟斤拷锟捷★拷 锟斤拷锟秸癸拷锟斤拷锟斤拷锟斤拷每一锟斤拷锟斤拷锟斤拷暮锟斤拷锟街帮拷锟斤拷锟斤拷锟阶拷图锟斤拷锟斤拷锟斤拷锟斤拷一锟叫讹拷注锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟矫伙拷锟斤拷模锟酵★拷

为锟斤拷源锟斤拷锟斤拷圆锟酵拷姹� PHP 锟结供锟斤拷锟斤拷锟皆o拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷装锟斤拷 PHP_FUNCTION 锟斤拷锟斤。锟斤拷锟斤拷锟斤拷锟斤拷预锟斤拷锟斤拷锟斤拷锟斤拷使锟斤拷 PHP 5.3 锟斤拷锟斤拷转锟斤拷为锟斤拷锟铰猴拷锟斤拷锟斤拷

void zif_hello_world(int ht, zval *return_value, zval **return_value_ptr,
                     zval *this_ptr, int return_value_used TSRMLS_DC)
{
}

为预锟斤拷锟斤拷锟斤拷锟斤拷没锟斤拷锟侥猴拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷同锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟酵伙拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 C 锟斤拷锟斤拷锟斤拷 zif_ 锟斤拷为前缀锟斤拷锟斤拷也锟缴匡拷锟斤拷锟斤拷锟斤拷模锟斤拷没锟斤拷锟斤拷锟矫诧拷锟斤拷锟斤拷栈锟斤拷锟斤拷锟斤拷锟饺� PHP 锟斤拷锟捷的诧拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷锟叫撅拷锟斤拷锟斤拷 INTERNAL_FUNCTION_PARAMETERS 锟斤拷锟叫讹拷锟斤拷锟剿碉拷 C 锟斤拷锟皆硷拷锟斤拷牟锟斤拷锟斤拷锟绞癸拷锟斤拷锟斤拷峁╋拷暮锟绞憋拷锟斤拷锟阶拷锟斤拷锟叫╋拷锟斤拷锟斤拷锟斤拷锟斤拷锟� PHP 锟芥本锟斤拷岱拷锟斤拷浠拷锟�

INTERNAL_FUNCTION_PARAMETERS
锟斤拷锟狡猴拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟绞猴拷
int ht 锟矫伙拷实锟绞达拷锟捷诧拷锟斤拷锟斤拷锟斤拷锟斤拷 ZEND_NUM_ARGS()
zval *return_value PHP 锟斤拷锟斤拷锟斤拷指锟诫,锟斤拷锟斤拷浞碉拷锟街碉拷锟斤拷莞锟斤拷没锟斤拷锟侥拷锟街碉拷锟� IS_NULL锟斤拷 RETVAL_*, RETURN_*
zval **return_value_ptr 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷时锟斤拷PHP 锟斤拷锟斤拷锟斤拷为锟斤拷锟斤拷锟斤拷指锟诫。锟斤拷锟斤拷锟介返锟斤拷锟斤拷锟矫★拷  
zval *this_ptr 锟斤拷锟斤拷锟斤拷锟斤拷一锟斤拷锟斤拷锟斤拷锟斤拷锟矫o拷锟斤拷指锟斤拷锟斤拷 $this 锟斤拷锟斤拷锟� PHP 锟斤拷锟斤拷锟斤拷 getThis()
int return_value_used 指示锟斤拷锟斤拷值锟角凤拷岜伙拷锟斤拷锟斤拷锟绞癸拷玫谋锟街撅拷锟� caller.  

锟斤拷锟斤拷锟斤拷锟斤拷锟侥猴拷锟斤拷什么锟铰讹拷锟斤拷锟斤拷锟斤拷只锟角简单地凤拷锟斤拷 NULL 锟斤拷锟矫伙拷锟斤拷锟斤拷 PHP 锟矫伙拷锟斤拷锟斤拷源锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷牟锟斤拷锟斤拷锟斤拷么撕锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷玫暮锟斤拷锟酵拷锟斤拷锟斤拷牟锟斤拷锟斤拷锟缴o拷

  1. 锟街诧拷锟斤拷锟斤拷锟斤拷锟藉。锟斤拷 C 锟斤拷锟斤拷锟叫憋拷锟斤拷锟节猴拷锟斤拷锟侥匡拷头锟斤拷锟斤拷植锟斤拷锟斤拷锟斤拷锟�

  2. 锟斤拷锟斤拷锟侥诧拷锟斤拷锟斤拷PHP 锟斤拷锟捷诧拷锟斤拷锟斤拷一锟斤拷锟斤拷锟斤拷亩锟秸伙拷希锟斤拷锟斤拷锟斤拷锟皆诧拷锟斤拷锟斤拷锟叫讹拷取锟斤拷校锟斤拷锟斤拷锟酵o拷锟斤拷锟斤拷锟斤拷时锟斤拷锟斤拷锟斤拷要锟缴斤拷锟斤拷转锟斤拷锟斤拷

  3. 实锟斤拷锟竭硷拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟侥★拷

  4. 锟借定锟斤拷锟斤拷值锟斤拷锟斤拷锟斤拷锟斤拷锟截★拷

锟斤拷某些锟斤拷锟斤拷拢锟斤拷锟叫╋拷锟斤拷锟斤拷实锟斤拷顺锟斤拷锟斤拷芊锟斤拷锟斤拷浠拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟竭碉拷锟斤拷锟斤拷锟斤拷帽锟斤拷锟斤拷歉锟剿筹拷锟�

Example #2 一锟斤拷锟津单的猴拷锟斤拷

/* {{{ proto void hello_world(string name)
   Greets a user */
PHP_FUNCTION(hello_world)
{
    char *name;
    int name_len;

    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) {
        return;
    }

    php_printf("Hello %s!", name);

    RETURN_TRUE;
}
/* }}} */

锟斤拷锟斤拷暮锟斤拷锟秸故撅拷锟斤拷锟叫╋拷锟斤拷帧锟斤拷锟斤拷锟斤拷强锟绞硷拷锟斤拷锟斤拷锟斤拷锟叫o拷php_printf 锟斤拷锟皆猴拷锟斤拷锟阶的憋拷锟铰碉拷锟角憋拷准锟斤拷 C 锟斤拷锟皆碉拷 printf 锟斤拷锟� PHP 锟侥版本锟斤拷锟斤拷 printf 锟斤拷同锟斤拷锟斤拷锟斤拷锟角达拷印锟斤拷锟斤拷锟教碉拷 STDOUT 通锟斤拷锟斤拷锟斤拷锟角碉拷锟斤拷前锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷杀锟斤拷没锟斤拷锟斤拷谢锟斤拷濉R拷锟斤拷锟角o拷php_printf 锟斤拷锟斤拷蟛糠锟� PHP 锟斤拷 API锟斤拷锟斤拷锟斤拷锟角讹拷锟斤拷锟狡帮拷全锟侥★拷锟斤拷要锟斤拷锟斤拷锟狡帮拷全锟斤拷锟接κ癸拷锟� PHPWRITE锟斤拷

Note: 通锟斤拷锟斤拷说锟斤拷要直锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟接★拷锟斤拷荩锟斤拷锟斤拷锟斤拷为锟斤拷锟斤拷锟街凤拷锟斤拷锟斤拷锟捷革拷锟矫伙拷锟斤拷锟斤拷锟矫伙拷锟斤拷锟斤拷锟斤拷什么锟斤拷 锟剿癸拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟角达拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷荩锟斤拷锟酵硷拷瘢┑暮锟斤拷锟斤拷锟紸PI 要锟斤拷锟斤拷诤锟斤拷锟斤拷锟斤拷峁╋拷锟斤拷锟斤拷锟斤拷锟饺★拷锟斤拷荨锟�

锟斤拷锟揭伙拷械锟� RETURN_TRUE 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟铰o拷锟斤拷 return_value 指锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟轿� IS_BOOLEAN锟斤拷锟斤拷锟斤拷锟斤拷值锟斤拷为 true 值锟斤拷然锟斤拷锟� C 锟斤拷锟斤拷锟叫凤拷锟截★拷锟斤拷锟皆碉拷使锟矫此猴拷时锟斤拷锟斤拷锟斤拷锟斤拷诖锟斤拷要锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷源锟侥管家o拷锟剿猴拷锟斤拷锟斤拷锟斤拷执锟斤拷锟斤拷锟侥达拷锟诫。

zend_parse_parameters() 锟斤拷锟斤拷锟斤拷锟斤拷锟饺★拷没锟斤拷硬锟斤拷锟斤拷锟秸伙拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷实锟斤拷锟阶拷锟斤拷锟斤拷锟斤拷植锟� C 锟斤拷锟皆憋拷锟斤拷锟斤拷锟斤拷锟斤拷没锟斤拷锟斤拷莸牟锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟酵诧拷锟缴憋拷转锟斤拷锟斤拷 锟斤拷锟斤拷锟结发锟斤拷一锟斤拷锟竭筹拷锟侥达拷锟斤拷锟斤拷息锟斤拷锟斤拷锟斤拷锟斤拷 FAILURE锟斤拷 锟斤拷锟接猴拷锟斤拷锟津单凤拷锟截碉拷锟斤拷锟斤拷锟�——锟斤拷锟睫革拷 return_value锟斤拷锟斤拷默锟较的凤拷锟斤拷值 NULL 锟斤拷锟截革拷锟矫伙拷锟斤拷

Note: 锟斤拷注锟解,FAILURE 锟斤拷示为 -1锟斤拷SUCCESS 锟斤拷示为 0锟斤拷为锟斤拷使锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷应锟斤拷锟斤拷使锟斤拷锟斤拷锟斤拷锟斤拷锟侥筹拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷值锟斤拷

锟斤拷锟捷革拷 zend_parse_parameters() 锟侥碉拷一锟斤拷锟斤拷锟斤拷锟斤拷锟矫伙拷实锟绞达拷锟捷碉拷锟斤拷锟斤拷锟侥诧拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷值锟斤拷为 ht 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟桔碉拷锟斤拷锟斤拷锟斤拷应使锟斤拷锟斤拷为实锟斤拷细锟节碉拷 ZEND_NUM_ARGS()锟斤拷

为锟斤拷锟斤拷 PHP 锟斤拷锟竭程革拷锟诫、锟竭程帮拷全锟斤拷源锟斤拷锟斤拷锟斤拷锟斤拷锟捷o拷锟斤拷要锟斤拷 TSRMLS_CC 锟斤拷锟斤拷锟竭筹拷锟斤拷锟斤拷锟侥★拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷同锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟侥诧拷锟斤拷锟斤拷锟斤拷为锟斤拷 zend_parse_parameters 锟斤拷要锟斤拷锟叫诧拷锟斤拷锟斤拷锟斤拷锟侥诧拷锟斤拷——锟斤拷锟斤拷锟斤拷要锟斤拷取锟斤拷锟矫伙拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷

锟斤拷锟竭筹拷锟斤拷锟斤拷锟斤拷之锟斤拷锟斤拷锟斤拷要锟斤拷牟锟斤拷锟斤拷锟矫匡拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷址锟斤拷锟斤拷械锟揭伙拷锟斤拷址锟斤拷锟绞撅拷锟斤拷锟斤拷汀锟� 锟斤拷锟较o拷锟揭伙拷锟斤拷址锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷诖锟斤拷锟斤拷锟剿碉拷锟街伙拷锟斤拷锟斤拷歉锟� "s"锟斤拷

锟斤拷锟揭伙拷锟斤拷谴锟斤拷锟揭伙拷锟斤拷锟斤拷锟街革拷锟斤拷要锟斤拷锟斤拷锟斤拷值锟斤拷 C 锟斤拷锟斤拷锟斤拷锟斤拷锟结供锟斤拷锟斤拷细锟节★拷锟斤拷锟斤拷锟街凤拷锟斤拷锟斤拷锟斤拷实锟较碉拷锟街凤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 NULL 锟斤拷尾锟斤拷锟斤拷 char*锟斤拷锟斤拷锟戒长锟斤拷锟角筹拷 NULL 锟街斤拷锟斤拷锟� int 锟斤拷值锟斤拷

锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟剿碉拷锟斤拷锟斤拷投锟接︼拷母锟斤拷拥锟� C 锟斤拷锟斤拷锟斤拷锟酵碉拷锟侥碉拷锟斤拷锟斤拷源锟斤拷锟诫发锟斤拷锟斤拷锟叫碉拷锟侥硷拷 README.PARAMETER_PARSING_API 锟斤拷锟揭碉拷锟斤拷锟斤拷锟斤拷锟斤拷锟揭拷锟斤拷涂杉锟斤拷卤锟�

zend_parse_parameters() 锟斤拷锟斤拷说锟斤拷锟斤拷
锟斤拷锟轿凤拷 锟斤拷锟接诧拷锟斤拷锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷
b zend_bool Boolean 值
l long integer (long) 值
d double float (double) 值
s char*, int 锟斤拷锟斤拷锟狡的帮拷全锟斤拷
h HashTable* 锟斤拷锟斤拷墓锟较o拷锟�