Hi Felipe,

I like the idea. It makes indirect method calls less expensive.

I would add a hint to specializer, to eliminate small overhead for regular function calls.

} else if (OP1_TYPE != IS_CONST &&
           EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY) &&
           zend_hash_num_elements(Z_ARRVAL_P(function_name)) == 2) {

Thanks. Dmitry.


On 06/05/2011 07:52 PM, Felipe Pena wrote:
Hi all,
Reading our bug tracker I noticed a good feature request [1] from 2009 which
points to an interesting feature that I think makes sense for us, since we
are now working with $f() using objects and strings, and the array('class',
'method') is an old known for call_user_func()-like functions.

So, I wrote a patch [2] that allow such behavior to be consistent with
arrays. See some examples:

class Hello {
    public function world($x) {
       echo "Hello, $x\n"; return $this;
    }
}

$f = array('Hello','world');
var_dump($f('you'));

$f = array(new Hello, 'foo');
$f();

All such calls match with the call_user_func() behavior related to magic
methods, static&  non-static methods.

The array to be a valid callback should be a 2-element array, and it must be
for the first element object/string and for the second string only. (just
like our zend_is_callable() check and opcodes related to init call)

Any thoughts?

[1] - http://bugs.php.net/bug.php?id=47160
[2] - http://felipe.ath.cx/diff/fr47160.diff
phpt: http://felipe.ath.cx/diff/fr47160.phpt



--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to