私は最近、オブジェクトのインスタンス化、オブジェクトといくつかのデータのオブジェクト プロパティへの割り当て、そして何かを行うためにメソッドの呼び出しを実行するコードを書きました。
しかし、コードをループで実行すると、機能せず、その理由がわかりませんでした。私のサンプル コードは次のとおりです。
コントローラー機能:-
$arrayOfObjects = SomeClass::getItems();
foreach ($arrayOfObjects as $object) {
SomeOtherObject::getInstance($object, time())->run();
}
SomeOtherObject::getInstance() :-
public static function getInstance($object, $timestamp) {
if (!(self::$_instance instanceof self)) {
self::$_instance = new self($object, $timestamp);
}
return self::$_instance;
}
private function __contruct($object, $timestamp) {
$this->_theObjectPassed = $object;
$this->_theTimestampPassed = $timestamp;
}
私を困惑させたのは、SomeOtherObject の run メソッドが期待どおりに動作していなかったことです。ループ内にデバッグを追加すると、つまり $object で getName() メソッドを出力すると、ループ内の各アイテムに対して同じものが得られました。
オブジェクトを構築する方法を(getInstance()の代わりに)次のように変更すると、機能しました:-
$someOtherObject = new SomeOtherObject($object, time());
$someOtherObject->run();
getInstance メソッドの動作とチェック方法に関係があると思いますが、誰かが説明できるかどうか疑問に思いました。
ありがとう