foreach 在 php 中投射对象

foreach to cast objects in php

假设我有一个转换函数,

Object::cast($stdClass, 'MyClass');

这个函数工作得很好,但是当我使用这个 foreach 循环时,

foreach ($stdClasses as &$stdClass) { // & to get the reference
  $stdClass = Object::cast($stdClass, 'MyClass');
}

它在我的 php 5.5.8 远程服务器上失败了,但奇怪的是它在我的本地服务器上运行 (php 5.5.12)。

可能是什么问题?因为 php 的版本不同?或者 php.ini 有一些指令在我的远程机器上是不允许的?

ps :我的本地服务器也在 windows 上,我的远程服务器在 linux.

我终于找到了它不起作用的地方,最终这个问题与这里的问题并没有真正的关系,但是因为这很令人惊讶我决定在这里回答自己也许你可以帮助我解释我刚才的问题经验丰富,因为我不确定为什么。

我有两个 classes,

class Foo {
  ...
}

class Bar {

  /** @var Foo $foos */
  $foos = array();

  public function set_foos ($foos) { $this->foos = $foos; }
  public function get_foos () { return $this->foos; }
}

在Linux,写作

$foos = [new Foo(), new Foo()];
$bar = new Bar(); $bar->set_foos($foos);

foreach ($bar->get_foos as &$foo) {
  $foo = 1;
}

没有用,Foo 对象没有更改为 1。要将它们更改为 1,我必须向 Bar 添加一个函数 class,

class Bar {

  ...

  public function serialize () {
    foreach($this->foos as &$foo) {
       $foo = 1; // works
    }
  }
}

有人可以解释为什么吗?