Home > Backend Development > PHP Tutorial > pecl - PHP扩展API版本

pecl - PHP扩展API版本

WBOY
Release: 2016-06-06 20:47:36
Original
1693 people have browsed it

最近在写一个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>
Copy after login
Copy after login

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

<code>5.3
---
5.4
</code>
Copy after login
Copy after login

还是跟扩展版本关联:

<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>
Copy after login
Copy after login

如何适配不同版本的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>
Copy after login
Copy after login

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

<code>5.3
---
5.4
</code>
Copy after login
Copy after login

还是跟扩展版本关联:

<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>
Copy after login
Copy after login

如何适配不同版本的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>
Copy after login

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

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template