gpt4 book ai didi

c - 如何在 php ext 中的类中创建私有(private)属性作为数组

转载 作者:行者123 更新时间:2023-11-30 18:00:59 24 4
gpt4 key购买 nike

我对编写扩展还很陌生。我试图得到这样的结果:

class FooClass {
private $elements = array();
}

实例化 FooClass 时出现错误:

PHP fatal error :无法访问私有(private)属性 ArrayClass::$elements

我确切地知道为什么会发生这种情况,我只是不知道将类定义创建为数组的正确方法。这是我到目前为止所拥有的,我确信它是微不足道的:

static zend_class_entry *foo_class_ptr;

void create_class_properties(TSRMLS_D) {
zend_declare_property_null(foo_class_ptr, "elements", strlen("elements"), ZEND_ACC_PRIVATE);
}

ZEND_METHOD(foo_class, __construct) {
zval *this = getThis();
zval *elements;

MAKE_STD_ZVAL(elements);
array_init(elements);

add_property_zval_ex(this, "elements", sizeof("elements"), elements);
}

static zend_function_entry foo_class_methods_def[] = {
PHP_ME(foo_class, __construct, NULL, ZEND_ACC_PUBLIC)
{NULL, NULL, NULL}
};

void create_class_def(TSRMLS_D) {
zend_class_entry ce;
INIT_CLASS_ENTRY(ce, "FooClass", foo_class_methods_def);

foo_class_ptr = zend_register_internal_class(&ce);
}

从 PHP_MINIT_FUNCTION() 调用 create_class_def get。这里有一个类似的问题:How do I add an array as an Object Property to a class declared within a PHP extension?但它没有解决私有(private)/ protected 访问问题。

谢谢

最佳答案

最简单的方法可能是使用zend_update_property:

void zend_update_property(zend_class_entry *scope, zval *object, const char *name, int name_length, zval *value TSRMLS_DC);

name_length 不包括终止符。

关于c - 如何在 php ext 中的类中创建私有(private)属性作为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10052739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com