#include "main/php.h"
#define PHP_METHOD ZEND_METHOD
#include "Zend/zend_API.h"
#define ZEND_METHOD(classname, name) ZEND_NAMED_FUNCTION(ZEND_MN(classname##_##name))
#define ZEND_NAMED_FUNCTION(name) void name(INTERNAL_FUNCTION_PARAMETERS)
#include "Zend/zend.h"
#define INTERNAL_FUNCTION_PARAMETERS int ht, zval *return_value, zval **return_value_ptr, zval *this_ptr, int return_value_used TSRMLS_DC
//PHP_METHOD宏,声明方法,第一个参数指定类名,第二个参数指定方法名
PHP_METHOD(Person, __construct);
STD_PHP_INI_ENTRY
#define STD_PHP_INI_ENTRY STD_ZEND_INI_ENTRY
//Zend/zend_ini.h
#define STD_ZEND_INI_ENTRY(name, default_value, modifiable, on_modify, property_name, struct_type, struct_ptr) \
ZEND_INI_ENTRY2(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr##_id)
#define ZEND_INI_ENTRY2(name, default_value, modifiable, on_modify, arg1, arg2) \
ZEND_INI_ENTRY2_EX(name, default_value, modifiable, on_modify, arg1, arg2, NULL)
#define ZEND_INI_ENTRY2_EX(name, default_value, modifiable, on_modify, arg1, arg2, displayer) \
ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, arg1, arg2, NULL, displayer)
#define ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, arg1, arg2, arg3, displayer) \
{ 0, modifiable, name, sizeof(name), on_modify, arg1, arg2, arg3, default_value, sizeof(default_value)-1, NULL, 0, 0, 0, displayer },
#define PHP_INI_BEGIN ZEND_INI_BEGIN
#define PHP_INI_END ZEND_INI_END
#define ZEND_INI_BEGIN() static const zend_ini_entry ini_entries[] = {
#define ZEND_INI_END() { 0, 0, NULL, 0, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0, 0, 0, NULL } };
//使用案例
PHP_INI_BEGIN()
STD_PHP_INI_ENTRY("yar.packager", "msgpack", PHP_INI_PERDIR, OnUpdateString, default_packager, zend_yar_globals, yar_globals)
PHP_INI_END()
//对应的实际代码是
static const zend_ini_entry ini_entries[] = {
{0, PHP_INI_PERDIR, "yar.packager", sizeof("yar.packager"), OnUpdateString, (void *)XtOffsetOf(zenf_yar_globals, default_packager), (void *)&yar_globals##_id, NULL, "msgpack", sizeof("msgpack")-1, NULL, 0, 0, 0, NULL},
{ 0, 0, NULL, 0, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0, 0, 0, NULL } };