Допустим, у меня есть функция приведения,
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 запретил некоторые директивы на моей удаленной машине?
п.с. Мой локальный сервер также работает под управлением Windows, а удаленный — под Linux.
Наконец-то я понял, где это не сработало, и, наконец, проблема на самом деле не связана с вопросом здесь, но так как это было довольно удивительно, я решил ответить здесь сам, и, возможно, вы можете помочь мне объяснить, что я только что испытал, потому что я не Обязательно пойми почему.
У меня было два класса,
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 Bar {
...
public function serialize () {
foreach($this->foos as &$foo) {
$foo = 1; // works
}
}
}
может кто-нибудь объяснить почему?
Других решений пока нет …