在我的PHP扩展中(用C编写)我有一个带有类名的字符串。更确切地说,我有名称空间+类名。例如:Dumb \ Factory
此类实现在我的扩展中定义的接口,该接口具有类条目
zend_class_entry *garlic_servicemanager_factoryinterface_ce;
并实现名为createService
在另一个类中,我有一个名为get
的方法,我检查参数是否为字符串。当它是一个String我想实例化该类并调用该方法,但是我不知道如何在我的C代码中实例化PHP类。
如何从字符串中实例化一个类,以便我可以调用接口定义的方法?
答案 0 :(得分:2)
你必须从字符串中找到class_entry,你可以像下面那样...
zend_class_entry *ce = NULL;
char *className = "Dumb\Factory";
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.