我有一个奇怪的问题。我正在写一个类似回调的系统,其中一些代码在一个类中调用一个函数,该函数将该函数添加到数组中,然后再执行它。这里是我的代码:使用array_push与闭包覆盖以前的元素
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
来查看数组里面到底是什么元素后,它总是显示一个对象,它总是最新的o ne补充说。
为什么代码覆盖前一个元素?如果有更好的方法来实现这个代码,我愿意提供建议。
我已经试过
我一直在使用$this->array[] = $function
尝试过了,我一直在使用$this->array[count($this->array)] = $function
也试过。都没有工作。
告诉我们如何你实际上* *执行的代码,并检查你的假设。目前我们只看到它的定义。 – deceze
你尝试使用'$ this-> array [] = $ function' – DevZer0
@ DevZer0是的,我确实使用了 – cpdt