I’d like to be able to dynamically create an instance method within a class’ constructor like so:
class Foo{
function __construct() {
$code = 'print hi;';
$sayHi = create_function( '', $code);
print "$sayHi"; //prints lambda_2
print $sayHi(); // prints 'hi'
$this->sayHi = $sayHi;
}
}
$f = new Foo;
$f->sayHi(); //Fatal error: Call to undefined method Foo::sayHi() in /export/home/web/private/htdocs/staff/cohenaa/dev-drupal-2/sites/all/modules/devel/devel.module(1086) : eval()'d code on line 12
The problem seems to be that the lambda_2 function object is not getting bound to $this within the constructor.
Any help is appreciated.
You are assigning the anonymous function to a property, but then try to call a method with the property name. PHP cannot automatically dereference the anonymous function from the property. The following will work
You can utilize the magic
__callmethod to intercept invalid method calls to see if there is a property holding a callback/anonymous function though:As of PHP5.3, you can also create Lambdas with
See the PHP manual on Anonymous functions for further reference.