laruence / yaf

Fast php framework written in c, built in php extension
http://pecl.php.net/package/yaf
Other
4.52k stars 1.37k forks source link

Yaf_Registry::set 的第二个参数为什么注释为 string 类型 #572

Closed alex-1900 closed 2 years ago

alex-1900 commented 2 years ago

Yaf_Registry::set 的第二个参数为什么注释为 string 类型呢?我存其他类型好像也没问题,这里有什么陷阱吗?

yunx-lee commented 2 years ago

Yaf_Registry::set 的第二个参数为什么注释为 string 类型呢?我存其他类型好像也没问题,这里有什么陷阱吗?

从yaf的源代码中可以看到 Registry::set()开放给php调用的接口如下:

/** {{{ proto public static Yaf_Registry::set($name, $value)
*/
PHP_METHOD(yaf_registry, set) {
    zval *value;
    zend_string *name;
    yaf_registry_object *registry = yaf_registry_instance();

    if (zend_parse_parameters(ZEND_NUM_ARGS(), "Sz", &name, &value) == FAILURE) {
        return;
    }

    if (yaf_registry_update(registry, name, value)) {
        RETURN_TRUE;
    }

    RETURN_FALSE;
}
/* }}} */

可以看到 value 的类型是 zval,而这个zval是可以表示任何php的数据类型的 所以Registry::set() 第二个参数,可以是php能表示的任何类型 关于zval可以看看鸟哥的博客 https://www.laruence.com/2018/04/08/3170.html