【问题标题】:zend_parse_parameters should return zval from inside PHP_FUNCTIONzend_parse_parameters 应该从 PHP_FUNCTION 内部返回 zval
【发布时间】:2016-11-16 19:15:59
【问题描述】:

我注意到在 95% 的情况下,在 PHP_FUNCTION 内部评估 zend_parse_parametersFAILURE 之后总是只有 return;。这没有任何意义,因为 PHP_FUNCTION 预计会返回 ZVAL。我不确定return_value 未明确设置时的默认值是什么。

我搜索了所有 php 源和所有与 php 捆绑在一起的扩展源。在 95% 的情况下,他们只是使用 return。在少数扩展中 - dateintl 他们做 RETURN_FALSE。在 Sara Colemon 编写的 an article 中,她使用了 RETURN_NULL()

我强烈认为我应该在大多数情况下使用RETURN_FALSE,这对PHP_FUNCTIONs 更有意义。我在某处遗漏了什么吗?

【问题讨论】:

    标签: php php-extension


    【解决方案1】:

    如果zend_parse_parameters() 失败,习惯上只是简单地return。那是documented in the PHP manual:

    如果 zend_parse_parameters 没有接收到 Hacker 指定的正确参数,并且接收到的参数无法转换为符合 type_spec,则会引发错误,按照惯例,Hacker 应该立即return

    According to the PHP manualreturn_value的类型默认为IS_NULL

    指向一个 PHP 变量的指针,该变量可以用传递给用户的返回值来填充。默认类型为 IS_NULL。

    此外,PHP manual notes

    如果给函数的参数不是它所期望的,例如传递一个期望字符串的数组,则函数的返回值是未定义的。在这种情况下,它可能会返回 NULL,但这只是一个约定,不能依赖。

    因此,zend_parse_parameters() 失败时的实际返回值必须被视为实现细节,因此,简单的returning 似乎是最合适的——让 Zend 引擎决定默认值。

    【讨论】:

      猜你喜欢
      • 2020-09-09
      • 1970-01-01
      • 2018-01-27
      • 2019-04-27
      • 2022-01-16
      • 2019-02-02
      • 1970-01-01
      • 2023-03-10
      • 2011-04-17
      相关资源
      最近更新 更多