tjbp tjbp - 6 months ago 30
PHP Question

Why can I not use $this as a lexical variable in PHP 5.5.4?

$ php --version
PHP 5.5.4 (cli) (built: Sep 19 2013 17:10:06)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies


The following code (similar to example at https://bugs.php.net/bug.php?id=49543):

class Foo
{
public function bar()
{
return function() use ($this)
{
echo "in closure\n";
};
}
}


fails with:

PHP Fatal error: Cannot use $this as lexical variable


Yet according to the PHP docs and a comment on that bug report from Rasmus Lerdorf, using $this in anonymous functions was added as of PHP 5.4. What am I doing wrong?

Answer

So it seems $this can be used simply if it isn't specified via the "use" keyword.

The following echoes 'bar':

class Foo
{
    private $foo = 'bar';

    public function bar()
    {
        return function()
        {
            echo $this->foo;
        };
    }
}

$bar = (new Foo)->bar();

$bar();

This was reported in the php-internals mailing list and is apparently overhang from 5.3's lack of support for this functionality:

http://marc.info/?l=php-internals&m=132592886711725

Comments