Rumah > pembangunan bahagian belakang > tutorial php > pecl - PHP扩展API版本

pecl - PHP扩展API版本

WBOY
Lepaskan: 2016-06-06 20:47:36
asal
1694 orang telah melayarinya

最近在写一个PHP扩展.
发现两个版本之间内部迭代器接口函数有些许变化,区别如下:

<code>{php-src}/Zend/zend_interface.c (in 5.3.X): 
ZEND_API void zend_user_it_get_current_key(zend_object_iterator *_iter, char **str_key, uint *str_key_len, ulong *int_key TSRMLS_DC)
----------------------------------------------------------------------------------
{php-src}/Zend/zend_interface.c (in 5.4.X): 
ZEND_API void zend_user_it_get_current_key(zend_object_iterator *_iter, zval *key TSRMLS_DC)
</code>
Salin selepas log masuk
Salin selepas log masuk

请问这个变更是和PHP版本关联:

<code>5.3
---
5.4
</code>
Salin selepas log masuk
Salin selepas log masuk

还是跟扩展版本关联:

<code>PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525
----------------------------------
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
</code>
Salin selepas log masuk
Salin selepas log masuk

如何适配不同版本的API呢?

回复内容:

最近在写一个PHP扩展.
发现两个版本之间内部迭代器接口函数有些许变化,区别如下:

<code>{php-src}/Zend/zend_interface.c (in 5.3.X): 
ZEND_API void zend_user_it_get_current_key(zend_object_iterator *_iter, char **str_key, uint *str_key_len, ulong *int_key TSRMLS_DC)
----------------------------------------------------------------------------------
{php-src}/Zend/zend_interface.c (in 5.4.X): 
ZEND_API void zend_user_it_get_current_key(zend_object_iterator *_iter, zval *key TSRMLS_DC)
</code>
Salin selepas log masuk
Salin selepas log masuk

请问这个变更是和PHP版本关联:

<code>5.3
---
5.4
</code>
Salin selepas log masuk
Salin selepas log masuk

还是跟扩展版本关联:

<code>PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525
----------------------------------
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
</code>
Salin selepas log masuk
Salin selepas log masuk

如何适配不同版本的API呢?

至少从源码上看,和ZEND_MODULE_API_NO、ZEND_EXTENSION_API_NO 没有关系。
只能是PHP_API_VERSION了。

zend_interfaces.c这个里面的这几个方法是定义的一些userspace iterator interfaces。
你是不是用的5.4开发分支的源代码?因为这个函数接口的改动是为了:Added support for non-scalar Iterator keys in foreach。
但这个特性是5.5才开始支持的,5.4中zend_user_it_get_current_key这个函数的签名和以前没有变化啊。

我觉得遇到这种情况,一种办法是:

<code>#if PHP_API_VERSION </code>
Salin selepas log masuk

不过我没踩过,有坑不要怪我

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan