Edit report at https://bugs.php.net/bug.php?id=64761&edit=1
ID: 64761
Comment by: netmosfera at gmail dot com
Reported by: netmosfera at gmail dot com
Summary: rebinding of closures doesn't work when they are
declared in a static method
Status: Wont fix
Type: Bug
Package: *General Issues
Operating System: any
PHP Version: 5.5.0beta4
Block user comment: N
Private report: N
New Comment:
makes no sense to me!
also in the global scope $this isn't available, but rebind does work!
Previous Comments:
------------------------------------------------------------------------
[2013-05-03 15:28:02] [email protected]
it's by design.
if you create a closure within a "scope", then the function actually is a
"METHOD", thus must be bound to current object(this) or static.
for your example, since the closure is create in a static function blah, which
makes no "this" avaliable while creating closure, then the closure is created
as
static ..
------------------------------------------------------------------------
[2013-05-02 13:39:28] netmosfera at gmail dot com
Description:
------------
<?
class Test
{
public $clos;
public $bobo = 22;
static function blah(){
return new static(function(){ echo $this->bobo; });
}
function __construct(\Closure $c)
{
$this->clos = $c->bindTo($this, $this);
}
}
// perfectly fine when closure is declared in global space
$a = new Test(function(){ echo $this->bobo; });
$clos = $a->clos;
$clos();
// binding doesn't work when closure is declared in a static method
$a = Test::blah();
$clos = $a->clos;
$clos();
// results in: Warning: Cannot bind an instance to a static closure
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=64761&edit=1