我有一个奇怪的问题。我正在编写一个类似回调的系统,其中一些代码调用一个类中的一个函数,该函数将该函数添加到一个数组中,然后再执行它。这是我的代码:
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
。两者都没有工作。