php - 当使用 !(self::$_instance instanceof self) 为什么这不起作用

标签 php object constructor self instanceof

我最近编写了一些代码来处理实例化对象、将对象和一些数据分配给对象属性,然后执行对方法的调用以执行某些操作。

但是当循环运行代码时,它无法工作,我不明白为什么,我的示例代码是:-

Controller 功能:-

$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 方法的工作方式以及它的检查方式有关,但想知道是否有人可以解释它。

谢谢

最佳答案

看来您误解了静态变量。将创建/初始化静态变量每个类一次,而不是每个对象一次。

您的 if 语句仅在第一次调用 getInstance() 时为真,此时 $_instance 尚未初始化。然后将为其分配对 SomeOtherObject 的新实例的引用。

在所有后续调用中,if 将返回 false,并且将只返回现有的 $_instance 而不是创建一个新实例。

从 getInstance() 方法中删除 if 语句:

public static function getInstance($object, $timestamp) {
    return new self($object, $timestamp);
}

关于php - 当使用 !(self::$_instance instanceof self) 为什么这不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14165223/

相关文章:

java - 如何使用 Java 构造函数实例化数组?

java - Java类构造函数

c# - 如何在 C# 中禁用无参数构造函数

php - 根据 IP 地址国家代码重定向访客

php - OpenX:停用横幅以显示在区域中

javascript - ReactFire - 将 Firebase 绑定(bind)到 React 状态时获取 'Objects are not valid as a React child'

Javascript如何根据不同数组中的匹配值更新数组中的值

javascript - 如何从多维对象中获取键及其值

PHP:MySQL 选择查询与字符串操作

php - 捕获 'call to a member function on a non-object'的最安全方法