While
<?php
class a {
public function b() {
$f = function () {
$this->c();
};
}
}
compiles as expected with PHP 5.4, the following
<?php
class a {
public function b() {
$f = function () use ($this) {
$this->c();
};
}
}
results in
Fatal error: Cannot use $this as lexical variable in ...
This is because
void zend_do_fetch_lexical_variable(znode *varname,
zend_bool is_ref TSRMLS_DC) /* {{{ */
{
znode value;
if (Z_STRLEN(varname->u.constant) == sizeof("this") - 1 &&
memcmp(Z_STRVAL(varname->u.constant), "this",
sizeof("this") - 1) == 0) {
zend_error(E_COMPILE_ERROR, "Cannot use $this as lexical
variable");
return;
}
is still in zend_compile.c. IIRC, this code was added in PHP 5.3 to
prevent $this from being used as a lexical variable. It should no
longer be required in PHP 5.4. Right?
--
Sebastian Bergmann Co-Founder and Principal Consultant
http://sebastian-bergmann.de/ http://thePHP.cc/
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php