【发布时间】:2017-01-14 09:52:41
【问题描述】:
我只是在试验一个 PHP 扩展,我想知道在扩展中调用对象构造函数的建议/首选方法是什么。 我已经读过,通过调用 object_init_ex 函数,不会自动调用该对象的构造函数。从我所做的测试来看,这似乎也是正确的。 假设我有以下代码,其中“Person”是一个有效的类名:
zend_class_entry *class_entry = NULL;
zend_string *class_name = zend_string_init("Person", sizeof("Person") - 1, false);
class_entry = zend_lookup_class(class_name);
if (class_entry != NULL) {
object_init_ex(return_value, class_entry);
/* call the Person::_construct method */
} else {
RETURN_NULL();
}
object_init_ext 调用后如何调用构造函数? 还有,php 5和php 7在这方面会不会有什么区别?
【问题讨论】:
-
@Mike 重复的是关于纯PHP的,这个问题是关于PHP扩展的,用C写的。
-
@CharlotteDunois 好点。我撤回了我的投票。
-
我写这个作为答案已经太晚了 - 但我认为你想复制 ReflectionClass::newInstance 中的功能 - php-lxr.adamharvey.name/source/xref/master/ext/reflection/…
-
哦,这就是让构造函数成为可调用对象的地方,这将非常有用 grumble grumble。
-
@Danack 或者更确切地说,可用的是一个无需手动设置 fci/fcc 即可直接调用 zend_function 的助手。奇怪的是,当您已经确切地知道需要调用什么时进行调用比进行可调用查找更难......
标签: php c++ object php-extension php-internals