Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用时!(self::$\ self的实例instanceof)为什么这样做失败_Php_Object_Constructor_Self_Instanceof - Fatal编程技术网

Php 使用时!(self::$\ self的实例instanceof)为什么这样做失败

Php 使用时!(self::$\ self的实例instanceof)为什么这样做失败,php,object,constructor,self,instanceof,Php,Object,Constructor,Self,Instanceof,我最近写了一些代码来处理实例化一个对象,将一个对象和一些数据分配给对象属性,然后调用一个方法来完成一些事情 但是在循环中运行代码时,它无法工作,我不明白为什么,我的示例代码是:- 控制器功能:- $arrayOfObjects = SomeClass::getItems(); foreach ($arrayOfObjects as $object) { SomeOtherObject::getInstance($object, time())->run(); } SomeOthe

我最近写了一些代码来处理实例化一个对象,将一个对象和一些数据分配给对象属性,然后调用一个方法来完成一些事情

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

控制器功能:-

$arrayOfObjects = SomeClass::getItems();
foreach ($arrayOfObjects as $object) {
    SomeOtherObject::getInstance($object, time())->run();
}
SomeOtherObject::getInstance():-

让我困惑的是SomeOtherObject上的run方法没有达到我的预期。当我在循环中添加调试,即在$object上输出getName()方法时,我在循环中的每个项都得到了相同的方法

将对象的构造方式更改为以下方式(而不是getInstance())时,效果良好:-

$someOtherObject = new SomeOtherObject($object, time());
$someOtherObject->run();
我猜这与getInstance方法的工作方式以及它是如何进行检查有关,但不知道是否有人可以解释它


谢谢

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

只有在第一次调用
getInstance()
时,$\u实例尚未初始化时,if语句才会为true。然后将为其指定对其他对象的新实例的引用

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

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


在您的示例中,SomeOtherObject::getInstance()的作用类似于单例创建方法$_在第一次调用
getInstance()
之后,将只创建一次实例。然后在下面的调用中,它将始终返回对创建后的同一对象的引用。这就是问题所在吗?(不确定我是否正确理解了这个问题)谢谢,我怀疑这与if有关。好的!您应该阅读PHP中的单例,就像我在上面的评论中提到的那样。然后你就知道了if但是需要注意的是,在PHP中,单例模式真正适用的原因只有几个。。玩得开心!:)
$someOtherObject = new SomeOtherObject($object, time());
$someOtherObject->run();
public static function getInstance($object, $timestamp) {
    return new self($object, $timestamp);
}