Welcome! Log In Create A New Profile

Advanced

[PHP-DEV] call user defined function with args

Posted by Yader Hernandez 
Yader Hernandez
[PHP-DEV] call user defined function with args
April 27, 2012 06:50AM
Hello,

I found this zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache
*fci_cache TSRMLS_DC) and many examples using it. I can successfully call
this and it will call the user function for me. I'm interested in learning
how to not only call the function, but also pass arguments to that function.

Can anyone please point me to where I can see how that's done?

thx
Laruence
Re: [PHP-DEV] call user defined function with args
April 27, 2012 09:00AM
Hi:
you can refer to zif_call_user_func, which could be find at
http://lxr.php.net/opengrok/xref/PHP_5_4/ext/standard/basic_functions.c#4714

thanks

On Fri, Apr 27, 2012 at 12:43 PM, Yader Hernandez
<[email protected]> wrote:
> Hello,
>
> I found this zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache
> *fci_cache TSRMLS_DC) and many examples using it. I can successfully call
> this and it will call the user function for me. I'm interested in learning
> how to not only call the function, but also pass arguments to that function.
>
> Can anyone please point me to where I can see how that's done?
>
> thx



--
Laruence  Xinchen Hui
http://www.laruence.com/

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
You might be interested by zend_call_method_with_[XXX]_params() as
well http://lxr.php.net/xref/PHP_5_3/Zend/zend_interfaces.h

Julien.Pauli

On Fri, Apr 27, 2012 at 8:51 AM, Laruence <[email protected]> wrote:
> Hi:
>  you can refer to zif_call_user_func, which could be find at
> http://lxr.php.net/opengrok/xref/PHP_5_4/ext/standard/basic_functions.c#4714
>
> thanks
>
> On Fri, Apr 27, 2012 at 12:43 PM, Yader Hernandez
> <[email protected]> wrote:
>> Hello,
>>
>> I found this zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache
>> *fci_cache TSRMLS_DC) and many examples using it. I can successfully call
>> this and it will call the user function for me. I'm interested in learning
>> how to not only call the function, but also pass arguments to that function.
>>
>> Can anyone please point me to where I can see how that's done?
>>
>> thx
>
>
>
> --
> Laruence  Xinchen Hui
> http://www.laruence.com/
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
Yader Hernandez
Re: [PHP-DEV] call user defined function with args
April 28, 2012 11:50PM
On Fri, Apr 27, 2012 at 1:06 AM, jpauli <[email protected]> wrote:

> You might be interested by zend_call_method_with_[XXX]_params() as
> well http://lxr.php.net/xref/PHP_5_3/Zend/zend_interfaces.h
>
> Julien.Pauli
>
> On Fri, Apr 27, 2012 at 8:51 AM, Laruence <[email protected]> wrote:
> > Hi:
> > you can refer to zif_call_user_func, which could be find at
> >
> http://lxr.php.net/opengrok/xref/PHP_5_4/ext/standard/basic_functions.c#4714
> >
> > thanks
> >
> > On Fri, Apr 27, 2012 at 12:43 PM, Yader Hernandez
> > <[email protected]> wrote:
> >> Hello,
> >>
> >> I found this zend_call_function(zend_fcall_info *fci,
> zend_fcall_info_cache
> >> *fci_cache TSRMLS_DC) and many examples using it. I can successfully
> call
> >> this and it will call the user function for me. I'm interested in
> learning
> >> how to not only call the function, but also pass arguments to that
> function.
> >>
> >> Can anyone please point me to where I can see how that's done?
> >>
> >> thx
> >
> >
> >
> > --
> > Laruence Xinchen Hui
> > http://www.laruence.com/
> >
> > --
> > PHP Internals - PHP Runtime Development Mailing List
> > To unsubscribe, visit: http://www.php.net/unsub.php
> >
>

I had a look at
http://lxr.php.net/opengrok/xref/PHP_5_4/ext/standard/basic_functions.c#4714
and
I don't understand how it's passing the arguments into the closure given by
the user.

I can successfully call the closure given, but passing arguments into the
closure is something I'm not clear on.

Can someone please shed some light?
Nikita Popov
Re: [PHP-DEV] call user defined function with args
April 29, 2012 12:20AM
On Sat, Apr 28, 2012 at 11:49 PM, Yader Hernandez
<[email protected]> wrote:
> I had a look at
> http://lxr.php.net/opengrok/xref/PHP_5_4/ext/standard/basic_functions.c#4714
> and
> I don't understand how it's passing the arguments into the closure given by
> the user.
>
> I can successfully call the closure given, but passing arguments into the
> closure is something I'm not clear on.
>
> Can someone please shed some light?

Look at the zend_parse_parameters call. It fetches the params into
fci.params and their number into fci.param_count.

zend_fcall_info.params is defined as zval***, so it's basically an
array of zval**. So you simply have to create one with your arguments
:)

Hope that helps,
Nikita

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
Yader Hernandez
Re: [PHP-DEV] call user defined function with args
April 29, 2012 12:50AM
On Sat, Apr 28, 2012 at 3:15 PM, Nikita Popov <[email protected]>wrote:

> On Sat, Apr 28, 2012 at 11:49 PM, Yader Hernandez
> <[email protected]> wrote:
> > I had a look at
> >
> http://lxr.php.net/opengrok/xref/PHP_5_4/ext/standard/basic_functions.c#4714
> > and
> > I don't understand how it's passing the arguments into the closure given
> by
> > the user.
> >
> > I can successfully call the closure given, but passing arguments into the
> > closure is something I'm not clear on.
> >
> > Can someone please shed some light?
>
> Look at the zend_parse_parameters call. It fetches the params into
> fci.params and their number into fci.param_count.
>
> zend_fcall_info.params is defined as zval***, so it's basically an
> array of zval**. So you simply have to create one with your arguments
> :)
>
> Hope that helps,
> Nikita
>

Ah! Great it works now. Thanks!

I'm assuming that return_value in this case is being used as whatever the
closure returned ?

ie. function ($element) { return false; }

then that means I can do Z_LVAL_P(return_value) /* 0 */, correct ?
Sorry, only registered users may post in this forum.

Click here to login