#45604 [Fbk->Bgs]: Lambda functions and $this scope

From: Date: Wed, 23 Jul 2008 23:05:10 +0000
Subject: #45604 [Fbk->Bgs]: Lambda functions and $this scope
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-127219@lists.php.net to get a copy of this message
 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)

« previous php.bugs (#127219) next »