Heim > Backend-Entwicklung > PHP-Tutorial > pecl - PHP扩展API版本

pecl - PHP扩展API版本

WBOY
Freigeben: 2016-06-06 20:47:36
Original
1694 Leute haben es durchsucht

最近在写一个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>
Nach dem Login kopieren
Nach dem Login kopieren

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

<code>5.3
---
5.4
</code>
Nach dem Login kopieren
Nach dem Login kopieren

还是跟扩展版本关联:

<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>
Nach dem Login kopieren
Nach dem Login kopieren

如何适配不同版本的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>
Nach dem Login kopieren
Nach dem Login kopieren

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

<code>5.3
---
5.4
</code>
Nach dem Login kopieren
Nach dem Login kopieren

还是跟扩展版本关联:

<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>
Nach dem Login kopieren
Nach dem Login kopieren

如何适配不同版本的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>
Nach dem Login kopieren

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

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage