2015-04-23 4 views
0

Пусть говорят, что я есть функция произнесения,Еогеаспа бросать объекты в PHP

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

эта функция отлично работает, но когда я использую этот цикл по каждому элементу,

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: также мой локальный сервер находится на окнах, а мой удаленный - на linux.

+0

Вы используете ту же операционную систему на своем удаленном сервере, что и ваша локальная? – nomistic

+0

@nomistic фактически нет. мой пульт - это linux, а мой локальный - это окна (извините за последний) – user544262772

+0

Не знаете, насколько ответственно это, не разделяя, как вы реализовали «Object :: cast». На удаленном сервере, как он «не работает»? Ошибка? Неверный выход? –

ответ

0

Я, наконец, нашел, где это не сработало, наконец проблема на самом деле не связана с вопросом здесь, но, поскольку это было совершенно неожиданно, я решил ответить сам себе и, возможно, вы можете помочь мне объяснить, что я только что испытал потому что я не уверен, чтобы понять, почему.

У меня было два класса,

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 у меня было для добавления функции в класс Бар,

class Bar { 

    ... 

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

может кто-нибудь объяснить, почему?

+0

Это может быть проблема чувствительности к регистру. Все, что работает в Windows, которое обычно не чувствительно к регистру, может не работать на Linux. Проверьте свои соглашения об именах. – nomistic

Смежные вопросы