假设我有以下代码:
class RandomNumber{
public $number;
function __construct($range,$callback){
$this->number = rand(0,$range);
$callback();
}
}
$rnd = new RandomNumber(9,function(){
echo "Line 11: ".$rnd->number."\n"; // Not working: empty variable
echo "Line 12: ".$number."\n"; // Not working: empty variable
echo "Line 13: ".$this->number."\n"; // Not working: Fatal error: Using $this when not in object context on line 13
});
echo "Line 15: ".$rnd->number."\n"; // Working: echoed random number
所以我正在尝试访问新创建的对象的属性(number
)。我无法猜测如何正确地做到这一点。我已经阅读了一些PHP文档,并试图搜索谷歌的解决方案,但我错过了这个或我使用错误的关键字进行搜索。如果你能指出我正确的方向,我会很高兴。
答案 0 :(得分:1)
这几乎是不可能的,因为事情是一个接一个地发生的,而且功能还没有意识到外面的世界。在你的情况下,$rnd
在函数外声明,并且它尚未初始化(它将在整行执行之后)
是的,您无法使用$this
,但您可以传递$this
以注入新创建的对象。
class RandomNumber{
public $number;
function __construct($range,$callback){
$this->number = rand(0,$range);
$callback($this);
}
}
$rnd = new RandomNumber(9,function($obj){
echo "Line 11: ".$obj->number."\n";
});
答案 1 :(得分:1)
你定义了类范围之外的函数,在它内部工作得很好。
并且$rnd
无法在其中工作,因为它尚未填充,这将在构造函数完成其工作之后发生。
这有效:
class RandomNumber{
public $number;
function __construct($range,$callback){
$this->number = rand(0,$range);
$callback($this);
$call2 = function(){
echo "Line 7 : " .$this->number."\n"; // Works
};
$call2();
}
public function callback($callback){
$callback();
}
}
$rnd = new RandomNumber(9,function($rnd){
echo "Line 15: ".$rnd->number."\n"; // Works
});
$rnd->callback(function() use ($rnd) {
echo "Line 19: ".$rnd->number."\n"; // Works
});