Edit report at http://bugs.php.net/bug.php?id=53573&edit=1
ID: 53573
Comment by: olamedia at gmail dot com
Reported by: kak dot serpom dot po dot yaitsam at gmail dot com
Summary: Invisible "static" property of Closure
Status: Open
Type: Bug
Package: Scripting Engine problem
PHP Version: 5.3.4
Block user comment: N
Private report: N
New Comment:
<?php
class a{
public $c = array();
function __call($name, $args){
$closure = $this->c[$name]; // example
$self = $this;
// how can I pass $self to closure?
$closure->static['self'] = $this // NO!, Reflection is giving empty
array
call_user_func_array($closure, $args);
}
}
$a = new a();
$a->c['hello'] = function($x) use ($self){
return 'Hello, '.$x.'! My name is '.get_class($self).'!';
};
$a->hello('php');
Previous Comments:
------------------------------------------------------------------------
[2010-12-19 06:03:08] kak dot serpom dot po dot yaitsam at gmail dot com
Description:
------------
var_dump($closure) displays public property named "static", but I cannot
access to
it with standard call: Closure object cannot have properties
It might be very useful!
Thanks.
Test script:
---------------
<?php
$a = function() {
static $foo = 'bar';
echo $foo."\n";
};
var_dump($a);
$a->{'static'}['foo'] = 'foo';
$a();
Expected result:
----------------
Output: foo
Actual result:
--------------
object(Closure)#1 (1) {
["static"]=>
array(1) {
["foo"]=>
string(3) "bar"
}
}
PHP Catchable fatal error: Closure object cannot have properties in
/home/web/1.php on line 7
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=53573&edit=1