如何在php扩展中读取常量属性


how to read a constant property in php extension?

我使用zend_declare_class_constant_stringl宏来声明常量属性,但我不知道如何读取常量?申报代码:

zend_declare_class_constant_stringl(myclass_ce,ZEND_STRL("WEL"),ZEND_STRL("welcome'n") TSRMLS_CC);

我想用zend_read_propertyzend_read_static_property来读取常量属性,但它不起作用!

(1) :我使用zend_read_static_property:

ZEND_METHOD(myclass,getName){
zval *name;
char *str;
zend_class_entry *ce;
ce=Z_OBJCE_P(getThis());
name=zend_read_static_property(ce,ZEND_STRL("name"),0 TSRMLS_CC);
str=Z_STRVAL_P(name);
RETURN_STRINGL(str,Z_STRLEN_P(name),1);
}

[root@localhostmyext]#php-f/var/www/html/myclass.php

Notice: Undefined property: myclass::$WEL in /var/www/html/myclass.php on line 3
(null)PHP Fatal error:  Access to undeclared static property: myclass::$name in      /var/www/html/myclass.php on line 5

(2) 我使用zend_read_property:

ZEND_METHOD(myclass,getName){
zval *name;
char *str;
zend_class_entry *ce;
ce=Z_OBJCE_P(getThis());
name=zend_read_property(ce,getThis(),ZEND_STRL("name"),0 TSRMLS_CC);
str=Z_STRVAL_P(name);
RETURN_STRINGL(str,Z_STRLEN_P(name),1);
}

[root@localhostmyext]#php-f/var/www/html/myclass.php

Notice: Undefined property: myclass::$WEL in /var/www/html/myclass.php on line 3
(null)silenceperPHP Fatal error:  Access to undeclared static property: myclass::$BYE in Unknown on line 0

使用zend_get_constant_ex:

zval c;
if (zend_get_constant_ex(ZEND_STRL("ClassName::CONSTANT_NAME"), &c, NULL, 0 TSRMLS_CC) == SUCCESS) {
    // ...
}

NULL是从中执行提取的类作用域(如果您想使用类似self的东西)。0是标志,例如ZEND_FETCH_CLASS_SILENT