你怎么知道 PHP 扩展中有一个 ArrayIterator

问题描述 投票:0回答:1

在 SaxonC PHP 扩展(用 C++ 编写)中,我正在编写实用程序,允许用户在 PHP 脚本中编写自定义函数,这些函数将在 XSLT、XPath 或 XQuery 中调用。因此,我们必须处理来自用户函数的许多 PHP 本机返回类型。除了 ArrayIterator 之外,我可以毫无问题地做到这一点。我们返回一个

zval
,它可以是一个 ArrayIterator。但是我如何使用 C++ 代码编写的 Zend 框架检查它是否实际上是 PHP 内部的 ArrayIterator 类型? 请参阅下面的 coe 片段:

zval retval;
int value = (int)Z_TYPE_P(&retval)

当我知道它应该是 ArrayIterator 而不是 IS_OBJECT 时,该值给出零(即 IS_UNDEF)。如何检查 ArrayIterator?

php c++ zend-framework2 php-extension
1个回答
0
投票
Z_TYPE_P(&retval) == IS_OBJECT &&
instanceof_function(Z_OBJCE_P(&retval), spl_ce_ArrayIterator)

spl_ce_ArrayIterator
spl_array.h

中声明
© www.soinside.com 2019 - 2024. All rights reserved.