我有一个奇怪的问题。我正在编写一个类似于回调的系统,其中一些代码调用类中的函数,该函数将函数添加到数组中,然后再执行它。这是我的代码:
class BaconClass {
private $array;
public function __construct() {
$this->array = array();
}
public function AddBacon($function) {
array_push($this->array, $function);
}
/* ... */
public function GetBacon() {
foreach($this->array as $function) {
echo $function();
}
}
}
然后我还有其他一些代码:
$bacon = new BaconClass();
$bacon->AddBacon(function() {
echo "Om nom nom";
});
/* And somewhere else I might have */
$bacon->AddBacon(function() {
echo "I like bacon";
});
/* And then after all of this I have */
$bacon->GetBacon();
此代码仅打印:
I like bacon
我已经确保传递给AddBacon
函数的数组实际上正在工作,但每当我使用var_dump
查看数组内部的内容后,它总是会有效显示一个对象,它始终是最新添加的对象。
为什么代码会覆盖前一个元素?如果有更好的方法来实现此代码,我愿意接受建议。
我尝试了什么
我已尝试使用$this->array[] = $function
,我也尝试使用$this->array[count($this->array)] = $function
。两者都没有工作。
答案 0 :(得分:0)
刚刚在php控制台中测试了提供的代码,得到了这个输出;
class BaconClass {
private $array;
public function __construct() {
$this->array = array();
}
public function AddBacon($function) {
array_push($this->array, $function);
}
/* ... */
public function GetBacon() {
foreach($this->array as $function) {
echo $function();
}
}
}
$bc = new BaconClass();
$bc->AddBacon(function() {echo 'something'; });
$bc->AddBacon(function() {echo 'something else'; });
$bc->GetBacon();
// outputs: somethingsomething else
似乎对我很好