How to create a new instance of a class from string?

In my PHP Extension (Written in C) I have a string with the class name. To be more precise, I have the namespace + class name. For example: Dumb\Factory

This class implements an interface defined in my extension which has a class entry

 zend_class_entry *garlic_servicemanager_factoryinterface_ce;

and implements a public method named createService

Inside another class I have a method named get and I check to see if the parameter is a string. When it is a String I would like to instantiate the class and call that method, however I don't know how to instantiate the PHP class from within my C code.

How may I instantiate a class from a string so I can call the method defined by the interface?

Upvotes: 0

Views: 145

Answers (1)

SuVeRa
SuVeRa

Reputation: 2904

You have to find the class_entry from the string and you can do it like below...

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.

Upvotes: 2

Related Questions