����� PHP �û���ĺ�������չ��һ������Ԫ�ء������ڴ����д���������չʱ��Ҳ�����Ķ����½ڣ����д���Ϣ���ڱ�д����Ҳ����Ч�ġ�
��һ����չ���Ӻ���ʱ��������ʹ�� ext_skel �ű�������ʼ�ṹ�ɴ���һ�������� C ������ʵ�֣�Ȼ������չ�ĺ��������ṩһ����ڡ�������ڿɺ���һ���Բ�����Ϣ�ṹ��ָ�롣 ���DZ���Ҫ�ṩ����Ϣ�����Ǵ�����ܲ������û�һ�����ã����ṩ�� PHP ������ API ���ʵ���Ϣ�������������У�����������Ϊֱ�Ӻ����������ݵģ�����ͨ��һ����ջ(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 } /* }}} */
�ڴ������У������㿴���������۵�Ԫ�غ�ģ��ṹ��ģ��ṹ�ɲμ� The zend_module structure��
����չ�ĵ�һ������ʵ�ʵ�ʵ�����ݡ� ���չ�������ÿһ������ĺ���֮ǰ������ע�ͼ��������һ�ж�ע���������������û���ģ�͡�
Ϊ��Դ����Բ�ͬ�汾 PHP �ṩ�����ԣ�������������װ�� 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 ���ݵIJ���������������������·�������о�����
INTERNAL_FUNCTION_PARAMETERS
���ж����˵� C
���Լ���IJ�����ʹ�����ṩ�ĺ�ʱ����ע����Щ���������� PHP �汾��ᷢ���仯��
���ƺ����� | ���� | ���ʺ� |
---|---|---|
int ht |
�û�ʵ�ʴ��ݲ��������� | ZEND_NUM_ARGS() |
zval *return_value |
PHP ������ָ�룬����䷵��ֵ���ݸ��û���Ĭ��ֵ�� IS_NULL ��
|
RETVAL_* , RETURN_* |
zval **return_value_ptr |
����������ʱ��PHP ������Ϊ������ָ�롣�����鷵�����á� | |
zval *this_ptr |
��������һ���������ã���ָ���� $this ����� PHP ������
|
getThis() |
int return_value_used |
ָʾ����ֵ�Ƿ�ᱻ������ʹ�õı�־�� caller. |
���������ĺ���ʲô�¶�������ֻ�Ǽط��� NULL ���û����� PHP �û�����Դ����������IJ������ô˺����������õĺ���ͨ�����IJ�����ɣ�
�ֲ��������塣�� C �����б����ں����Ŀ�ͷ����ֲ�������
�����IJ�����PHP ���ݲ�����һ������Ķ�ջ�ϣ�������Բ������ж�ȡ��У�����ͣ�������ʱ������Ҫ�ɽ���ת����
ʵ���������������ġ�
�趨����ֵ���������ء�
��ijЩ����£���Щ�����ʵ��˳����ܷ����仯��������������������ߵ�������ñ����Ǹ�˳��
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; } /* }}} */
����ĺ���չʾ����Щ���֡������ǿ�ʼ��������У�php_printf
���Ժ����ı��µ��DZ��� C ���Ե� printf
��� PHP
�İ汾���� printf
��ͬ�������Ǵ�ӡ�����̵� STDOUT
ͨ�������ǵ���ǰ����������ɱ��û����л��塣Ҫע����ǣ�php_printf
����� PHP �� API�������Ƕ����ư�ȫ�ġ���Ҫ�����ư�ȫ���Ӧʹ��
PHPWRITE
��
Note: ͨ����˵��Ҫֱ�����������ӡ���ݣ������Ϊ�����ַ������ݸ��û������û�������ʲô�� �˹����������������Ǵ�����������ݣ���ͼ�ĺ�����API Ҫ����ں������ṩ��������ȡ���ݡ�
���һ�е� RETURN_TRUE
�����������£���
return_value
ָ�������������Ϊ
IS_BOOLEAN
��������ֵ��Ϊ true
ֵ��Ȼ��� C
�����з��ء����Ե�ʹ�ô˺�ʱ��������ڴ��Ҫ������������Դ�Ĺܼң��˺�������ִ�����Ĵ��롣
zend_parse_parameters()
���������ȡ�û��Ӳ�����ջ�������������������ʵ���ת�������ֲ� C
���Ա���������û����ݵIJ���������������Ͳ��ɱ�ת����
�����ᷢ��һ���߳��Ĵ�����Ϣ�������� FAILURE
��
���Ӻ������ص������——���� return_value
����Ĭ�ϵķ���ֵ
NULL
���ظ��û���
Note: ��ע�⣬
FAILURE
��ʾΪ-1
��SUCCESS
��ʾΪ0
��Ϊ��ʹ����������Ӧ����ʹ���������ij�����������ֵ��
���ݸ� zend_parse_parameters()
�ĵ�һ���������û�ʵ�ʴ��ݵ������IJ�������������ֵ��Ϊ ht
���������������������������۵�������Ӧʹ����Ϊʵ��ϸ�ڵ�
ZEND_NUM_ARGS()
��
Ϊ���� PHP ���̸߳��롢�̰߳�ȫ��Դ���������ݣ���Ҫ�� TSRMLS_CC
�����߳������ġ�������������ͬ�������������IJ�������Ϊ��
zend_parse_parameters
��Ҫ���в��������IJ���——������Ҫ��ȡ���û�������������
���߳�������֮������Ҫ��IJ�����ÿ�����������ַ����е�һ���ַ���ʾ�����͡�
���ϣ��һ���ַ������������ڴ�����˵��ֻ�����Ǹ� "s"
��
���һ���Ǵ���һ������ָ���Ҫ������ֵ�� C
���������ṩ����ϸ�ڡ������ַ�������ʵ�ϵ��ַ����������� NULL
����� char*
�����䳤���dz� NULL �ֽ���� int
��ֵ��
�����������˵�����Ͷ�Ӧ�ĸ��ӵ� C �������͵��ĵ�����Դ���뷢�����е��ļ�
README.PARAMETER_PARSING_API
���ҵ����������Ҫ���Ϳɼ��±�
���η� | ���Ӳ��������� | ���� |
---|---|---|
b |
zend_bool |
Boolean ֵ |
l |
long |
integer (long) ֵ |
d |
double |
float (double) ֵ |
s |
char*, int |
�����Ƶİ�ȫ�� |
h |
HashTable* |
����Ĺ�ϣ�� |