using zend_parse_parameters to get an object of an externally defined class

php.internals

alon

18 years ago
A newbie question: How can I use zend_parse_parameters to accept object of an external class as parametr. I want for example to build a method that accepts 'DateTime' objects. I know that the syntax of zend_parse_parameters is something like: zval *obj; zend_class_entry ce; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &obj, ce, &d) == FAILURE) { return; } But how do I initiate the zend_class_entry to specify an object of the DateTime class?

Michael Wallner

18 years ago
alon wrote:
> A newbie question: > > How can I use zend_parse_parameters to accept object of an external class as > parametr. > > I want for example to build a method that accepts 'DateTime' objects.
> But how do I initiate the zend_class_entry to specify an object of the > DateTime class?
The class entry pointer or a function which returns it needs to be exported by the datetime API. IIRC that's not the case ATM.
-- Michael

Johannes Schlueter

18 years ago
Hi, On Fri, 2007-09-28 at 13:21 +0200, Michael Wallner wrote:
> alon wrote: > > A newbie question: > > > > How can I use zend_parse_parameters to accept object of an external class as > > parametr. > > > > I want for example to build a method that accepts 'DateTime' objects. > > > But how do I initiate the zend_class_entry to specify an object of the > > DateTime class? > > The class entry pointer or a function which returns it needs to be > exported by the datetime API. IIRC that's not the case ATM. >
you can also get the ce using zend_fetch_class() API function. So the code would look something like zend_class_entry *ce = zend_fetch_class("DateTime", sizeof("DateTime")-1, ZEND_FETCH_CLASS_DEFAULT TSRMLS_CC); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &obj, ce) == FAILURE) { return; } When referencing an internal class it should be enough to do the fetch just once and cache the value inside your extension.