【发布时间】:2013-01-16 02:31:14
【问题描述】:
我正在使用 C 开发一个 PHP 扩展。到目前为止,我正在对从 PHP 用户空间传递给扩展函数的参数进行正确验证。
宏 ZEND_BEGIN_ARG_INFO_EX 可用于为 Zend Engine 提供有关函数参数的信息。宏的第 4 个参数,命名为required_num_args,让引擎自动控制参数的数量,让我免去这个麻烦。但是,我找不到让它工作的方法:引擎总是在没有任何警告的情况下运行扩展的函数,即使 PHP 脚本没有传递足够的参数。
这是我对函数参数的定义:
ZEND_BEGIN_ARG_INFO_EX(test_func_swt_arginfo, 0, 0, 3)
ZEND_ARG_INFO(1, firstArg)
ZEND_ARG_ARRAY_INFO(0, secondArg, true)
ZEND_ARG_OBJ_INFO(1, thirdArg, SomeClass, false)
ZEND_END_ARG_INFO()
这是我对函数的定义,由 PHP 扩展导出:
static const zend_function_entry test_func_functions[] = {
PHP_FE(sample_with_types, test_func_swt_arginfo)
PHP_FE_END
};
这是我的功能:
PHP_FUNCTION(sample_with_types)
{
RETURN_TRUE;
}
这是我运行的 PHP 脚本:
<?php
sample_with_types();
预期结果:PHP 显示错误/警告/异常,类似于 “没有足够的参数传递给函数”;该函数不执行。
实际结果:函数执行并返回true。
如何正确配置函数参数结构,以便 Zend Engine 自动检查参数数量?还是我弄错了ZEND_BEGIN_ARG_INFO_EX 宏中required_num_args 参数的用途?
【问题讨论】:
标签: php c php-extension php-internals