首先请原谅我的英语,我不是母语人士,很抱歉,如果它看起来很粗糙,这是我第一次在这个网站上发帖。
我认为我的问题很简单。比方说,我们有:
class A {
function foo() {
function bar ($arg){
echo $this->baz, $arg;
}
bar("world !");
}
protected $baz = "Hello ";
}
$qux = new A;
$qux->foo();
在这个例子中,“$this”显然不是指我的对象“$qux”。
我该怎么做才能让它引用“$aux”?
就像 JavaScript 中的情况一样:bar.bind(this, "world !")
PHP 没有嵌套函数,所以在你的例子中bar
本质上是全球性的。您可以通过使用闭包(=匿名函数)来实现您想要的,它支持binding http://php.net/manual/en/closure.bindto.php从 PHP 5.4 开始:
class A {
function foo() {
$bar = function($arg) {
echo $this->baz, $arg;
};
$bar->bindTo($this);
$bar("world !");
}
protected $baz = "Hello ";
}
$qux = new A;
$qux->foo();
UPD:但是,bindTo($this)
没有多大意义,因为闭包会自动继承this
从上下文来看(同样在 5.4 中)。所以你的例子可以很简单:
function foo() {
$bar = function($arg) {
echo $this->baz, $arg;
};
$bar("world !");
}
UPD2:对于 php 5.3 - 这似乎只有通过像这样的丑陋的黑客才能实现:
class A {
function foo() {
$me = (object) get_object_vars($this);
$bar = function($arg) use($me) {
echo $me->baz, $arg;
};
$bar("world !");
}
protected $baz = "Hello ";
}
Here get_object_vars()
用于“发布”受保护/私有属性,以使它们在闭包内可访问。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)