【发布时间】:2013-01-04 21:24:51
【问题描述】:
我最近编写了一些代码来处理实例化对象、将对象和一些数据分配给对象属性,然后执行对方法的调用以执行某些操作。
但是在循环运行代码时,它无法工作,我不明白为什么,我的示例代码是:-
控制器功能:-
$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 方法的工作方式以及它的检查方式有关,但想知道是否有人可以解释一下。
谢谢
【问题讨论】:
-
SomeOtherObject::getInstance() 在您的示例中将像单例创建方法一样。 $_instance 只会在第一次调用
getInstance()之后创建一次。然后在以下调用中,它将始终返回对曾经创建的相同对象的引用。这是问题吗? (不确定我是否理解正确)
标签: php object constructor self instanceof