奇妙な問題があります。一部のコードがクラス内の関数を呼び出し、関数を配列に追加してから後で実行する、コールバックのようなシステムを作成しています。これが私のコードです:
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
、要素を追加した後に配列の内容を確認するために使用すると、常に 1 つのオブジェクトが表示されます。これは常に最後に追加されたものです。
コードが前の要素を上書きするのはなぜですか? このコードを実装するためのより良い方法があれば、提案をお待ちしています。
私が試したこと
を使ってみました$this->array[] = $function
が、 も使ってみ$this->array[count($this->array)] = $function
ました。どちらも機能していません。