0

我有一个奇怪的问题。我正在编写一个类似回调的系统,其中一些代码调用一个类中的一个函数,该函数将该函数添加到一个数组中,然后再执行它。这是我的代码:

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。两者都没有工作。

4

1 回答 1

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

对我来说似乎工作正常

于 2013-06-06T08:44:44.953 回答