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

如何在php扩展中读取常量属性?,php,php-extension,php-internals,Php,Php Extension,Php Internals,我使用zend\u declare\u class\u constant\u stringl宏来声明常量属性,但我不知道如何读取常量? 声明代码: zend_declare_class_constant_stringl(myclass_ce,ZEND_STRL("WEL"),ZEND_STRL("welcome\n") TSRMLS_CC); 我想使用zend\u read\u属性或zend\u read\u static\u属性读取常量属性,但它不起作用 (1) : 我使用zend\u re

我使用
zend\u declare\u class\u constant\u stringl
宏来声明常量属性,但我不知道如何读取常量? 声明代码:

zend_declare_class_constant_stringl(myclass_ce,ZEND_STRL("WEL"),ZEND_STRL("welcome\n") TSRMLS_CC);
我想使用
zend\u read\u属性
zend\u read\u static\u属性
读取常量属性,但它不起作用

(1) : 我使用
zend\u read\u static\u属性

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
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
(2) 我使用zend_read_属性:

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)PHP Fatal error:  Access to undeclared static property: myclass::$name in      /var/www/html/myclass.php on line 5
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
使用:


NULL
是执行获取的类范围(如果您想使用类似于
self
)。
0
是标志,例如
ZEND\u FETCH\u CLASS\u SILENT

像“它不起作用!”这样的说法有点不具体,不清楚您实际期望的是什么以及发生了什么。想分享更多吗?像这样:
ZEND_方法(myclass,u构造){zval-wel;ZEND_类_entry*ce;ce=Z_-OBJCE_P(getThis());ZEND_-get_常量ex(ZEND_STRL(“self::wel”),&wel,ce,0tsrmls_CC);php_printf(“%s”,Z_STRVAL(wel))}
总共1个内存泄漏detected@silenceper你必须
zval\u dtor
之后的zval当然是缺少的
ClassName::
,所以这个答案很有用,尽管我想问一下,关于使用c的PHP扩展有没有好的资源?