【发布时间】:2013-06-02 04:28:11
【问题描述】:
我有一个奇怪的问题。我正在编写一个类似回调的系统,其中一些代码调用一个类中的一个函数,该函数将该函数添加到一个数组中,然后再执行它。这是我的代码:
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。两者都不起作用。
【问题讨论】:
-
向我们展示您实际上是如何执行代码并检查您的假设的。目前我们只看到它的定义。
-
你尝试使用
$this->array[] = $function -
@deceze 好了。
-
好的,我刚开始收到错误
Can't use function return value in write context。我怎样才能解决这个问题? 编辑 这实际上只是我刚刚犯的一个语法错误。我修复了它,但现在整个代码都无法正常工作...... -
您在赋值的左侧有一个函数调用,例如
foo() = bar。修复它。
标签: php arrays callback closures array-push