����� 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* |
����Ĺ�ϣ�� |