Req #53573 [Com]: Invisible "static" property of Closure
Edit report at https://bugs.php.net/bug.php?id=53573&edit=1
ID: 53573
Comment by: reeze@php.net
Reported by: kak dot serpom dot po dot yaitsam at gmail dot com
Summary: Invisible "static" property of Closure
Status: Open
Type: Feature/Change Request
Package: Scripting Engine problem
PHP Version: 5.3.4
Block user comment: N
Private report: N
New Comment:
In fact, closure is a class: Closure just an implementation detail.
we should forget about the class itself. the output static is just
let you to ease debugging but not for public access
Previous Comments:
------------------------------------------------------------------------
[2011-02-16 02:04:21] olamedia at gmail dot com
Please, let Closure be standard object without any restrictions.
Let developers decide what they can use, and what must not.
PHP is already full enough of "RESERVED" "YOU MUST NOT" "YOU CAN NOT"
"YOU SHOULD
NOT" "ITS HARD, SO WE WILL NOT MAKE THIS FEATURE" "I DONT NEED THIS, SO PLEASE
DON'T REQUEST THIS FEATURE"
------------------------------------------------------------------------
[2011-02-16 01:51:07] olamedia at gmail dot com
<?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');
------------------------------------------------------------------------
[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 https://bugs.php.net/bug.php?id=53573&edit=1
Thread (5 messages)