[英]Access instance of class in callback anonymous function
我有一类带有一些将匿名函数作为参数的方法的类。 该类如下所示:
class MyClass {
public function myMethod($param, $func) {
echo $param;
user_call_func($func);
}
public function sayHello() {
echo "Hello from MyClass";
}
}
我希望能够做这样的事情:
$obj = new MyClass;
$obj->myMethod("Hi", function($obj) {
echo "I'm in this anonymous function";
// let's use a method from myClass
$obj->sayHello();
});
因此,在我的匿名函数中,由于我将$ obj作为参数传递给匿名函数,因此我应该能够从匿名函数内部访问其方法。 在这种情况下,我们会看到
I'm in this anonymous function
Hello from MyClass
我将如何实现?
谢谢
使用use
构造:
$self = $this;
$obj->myMethod("Hi", function($obj) use($self) {
echo "I'm in this anonymous function";
// let's use a method from myClass
$obj->sayHello();
});
您必须在另一个变量中捕获$this
,因为use
不允许$this
传入,除非您使用的是PHP> = 5.4。 文档中的相关报价:
闭包也可以从父范围继承变量。 任何此类变量都必须传递给
use
语言构造。 从父作用域继承变量与使用全局变量不同。 全局变量存在于全局范围内,无论执行什么功能,该变量都是相同的。 闭包的父作用域是在其中声明闭包的函数(不一定是从其调用的函数)。
更新
如以下简单脚本所示,知道在执行匿名函数时保留当前所在类的可见性也可能会有所帮助:
class Test
{
public function testMe()
{
$self = $this;
$tester = function() use($self) {
$self->iAmPrivate();
};
$tester();
}
private function iAmPrivate()
{
echo 'I can see my own private parts!';
}
}
$test = new Test;
$test->testMe();
输出:
我可以看到自己的私人零件!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.