在我的PHP扩展(用C编写)中,我有一个带有类名的字符串。更准确地说,我有名称空间+类名。例如:Dumb \ Factory
这个类实现了在我的扩展中定义的接口,它有一个类条目
zend_class_entry *garlic_servicemanager_factoryinterface_ce;
并实现了一个名为createService
的公共方法
在另一个类中,我有一个名为get
的方法,我检查参数是否是字符串。当它是String时,我想实例化该类并调用该方法,但我不知道如何从C代码中实例化PHP类。
如何从字符串实例化类,以便调用接口定义的方法?
你必须从字符串中找到class_entry,你可以像下面这样做。。。
zend_class_entry *ce = NULL;
char *className = "DumbFactory";
zend_class_entry **pce;
if (zend_lookup_class(className, strlen(className ), &pce TSRMLS_CC) == FAILURE) {
zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "Class %s does not exist", className);
return;
}
ce = *pce;
// Now you have got "zend_class_entry" and
// now you can create N number of objects out of it.
// Check the Reflection API for more info.