如何从字符串创建类的新实例?

时间:2015-04-04 23:16:36

标签: php-extension

在我的PHP扩展中(用C编写)我有一个带有类名的字符串。更确切地说,我有名称空间+类名。例如:Dumb \ Factory

此类实现在我的扩展中定义的接口,该接口具有类条目

 zend_class_entry *garlic_servicemanager_factoryinterface_ce;

并实现名为createService

的公共方法

在另一个类中,我有一个名为get的方法,我检查参数是否为字符串。当它是一个String我想实例化该类并调用该方法,但是我不知道如何在我的C代码中实例化PHP类。

如何从字符串中实例化一个类,以便我可以调用接口定义的方法?

1 个答案:

答案 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.