2012-08-30 4 views
3

Я сделал обширный поиск, и нашел это:Изменяя переменный класс, что это массив в PHP

&__get() issues, again. Major frustration is afoot

Однако ни один из примеров, приведенных на самом деле не работает.

У меня есть объект, который имеет переменную, которая представляет собой многомерный массив. Мне нужно изменить значение ключа в этом массиве.

Пример:

foreach ($code->files as $index => $value) 
{ 
    if (strcmp($code->files[$index]['id'], $fileid) == 0) 
    {        
     $code->files[$index]['title'] = "Test"; 
     $code->save(); 
    } 
} 

Приведенный выше код делает генерирует ошибку:

Notice: Indirect modification of overloaded property CodeDocument::$files has no effect in /var/www/deletefile.php on line 57 

Я пробовал все примеры в ссылке выше ссылочного нити, и ни один из них не работает. Они все порождают ошибку выше.

Я использую библиотеку готовых классов (phpillow), но я попытался изменить функцию __get на & __get, и она подавляет ошибку выше, но переменная, которую я пытаюсь изменить, по-прежнему не получает нового значения.

Я не уверен, что я делаю это правильно, но у меня полная потеря. Выполнение этого без размещения массива в качестве переменной класса потребует много рефакторинга, которое я бы предпочел избежать, если это вообще возможно.

Любая помощь ВОЗМОЖНО высоко ценится.

+0

Не могли бы вы размещаете код 'CodeDocument'? – xdazz

+0

Можете ли вы показать свою функцию '__set()'? – Touki

+0

Вы не видите самую важную часть: что означает '__get'? – Jon

ответ

0

ли эту работу:

foreach ($code->files as $index => $value) 
{ 
    if (strcmp($value['id'], $fileid) == 0) 
    {        
     $value['title'] = "Test"; 
     $code->save(); 
    } 
} 
+0

Казалось, он избавился от сообщения, которое я получал, но он все еще не изменил значение. – user1635243

+0

Я думаю, проблема может заключаться в том, что '__get' не может действительно вернуть ссылку, потому что методы, возвращающие ссылки, должны вызываться с' & '. Вместо использования '__get' используйте обычный метод и вызовите его с помощью ссылочного синтаксиса. – Barmar