#45604 [Fbk->Bgs]: Lambda functions and $this scope
ID: 45604
Updated by: stas@php.net
Reported By: george at noodles dot gr
-Status: Feedback
+Status: Bogus
Bug Type: Scripting Engine problem
Operating System: *
PHP Version: 5.3CVS-2008-07-23 (snap)
New Comment:
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php
This is the intended behavior. Use "static function" if you don't need
$this.
Previous Comments:
------------------------------------------------------------------------
[2008-07-23 13:48:21] jani@php.net
Please report this kind of things to internals@lists.php.net as this
feature is still under heavy development and jury is out to decide such
things.
------------------------------------------------------------------------
[2008-07-23 12:07:06] george at noodles dot gr
Description:
------------
When creating a normal function inside a class and calling it, the
function doesn't have access to $this.
"Fatal error: Using $this when not in object context"
When creating a lambda function inside a class, $this is visible from
the new function's scope and can be accessed normally.
Wouldn't it be better (and maybe safer) to allow the use of $this as a
closure instead of passing it to the new lambda function?
Currently trying to use $this as a closure dies with a "Fatal error:
Cannot use $this as lexical variable" error.
Example for the suggestion.
$x = function () use ($this) { return $this->hello; };
Reproduce code:
---------------
<?php
class something
{
public $hello = 'Hello world!';
public function world()
{
$x = function () { return $this->hello; };
return $x();
}
}
$s = new something();
echo $s->world();
?>
Expected result:
----------------
Not to be able to use $this.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=45604&edit=1
Thread (3 messages)