Re: $arr = array('Hello', 'world') ; $arr();
| From: | Christian Kaps | Date: | Wed, 08 Jun 2011 11:39:08 +0000 |
| Subject: | Re: $arr = array('Hello', 'world') ; $arr(); | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-53205@lists.php.net to get a copy of this message | ||
Hi,
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) {what happens if I use this code. class Foo { public $bar; public function __construct() {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?
$this->bar = array($this, 'baz');
$this->bar();
}
public function bar() {
echo 'bar';} public function baz() {
echo 'baz';} } new Foo(); What is the output of this snippet? Are there the same rules as for closures? Christian