implements ArrayAccess

svetasmirnova

маленький монстрик
> $data['plugin_info']['silence_time'] = 2;
Без этого нельзя? И вообще, какая конечная задача?
 

Opik

Новичок
svetasmirnova
конечная задача перезаписать элемент массива. и потом сохранить в файл.

-~{}~ 14.11.05 14:29:

кстати, ещё особенность. при вышеописанных условиях:
тоже уходит в фатал еррор.
$data['foo']++;
 

svetasmirnova

маленький монстрик
Массив обязательно двумерный? Если да, то его размерность постоянна?
 

Opik

Новичок
svetasmirnova
это 1 свойство как массив. но крайней мере пока.
 

svetasmirnova

маленький монстрик
Не поняла. Тебе нужно обращаться к объекту как к массиву? Да? Обязательно как к двумерному массиву?
(Сейчас попробую $data объектом сделать: может быть инкремент заработает)

-~{}~ 14.11.05 16:30:

Нет, не заработал.

-~{}~ 14.11.05 16:42:

Возвратить refernce можно. Например, так: http://phpclub.ru/paste/index.php?show=819 С инкрементом у меня пока не получается, но идея понятна?
----
А вообще работа с объектами как с массивами, по-моему, не лучший вариант. В контексте PHP, во всяком случае.

-~{}~ 14.11.05 16:50:

Кстати, с инкрементом в любом случае не получится: интерфейс не позволит возвратить reference на скаляр.
 

Profic

just Profic (PHP5 BetaTeam)
Opik
Тебе для какого php-то? Если для 5, то я же приводил пример:
PHP:
<?php 
class SuperArray implements ArrayAccess { 
        private $store = NULL; 

        public function __construct() { 
                $this->store = new StdClass(); 
        } 

        public function offsetExists($offset) { 
                return isset($this->store->$offset); 
        } 

        public function &offsetGet($offset) { 
                return $this->store->$offset; 
        } 

        public function offsetSet($offset, $value) { 
                return $this->store->$offset = $value; 
        } 

        public function offsetUnset($offset) { 
                unset($this->store->$offset); 
        } 
} 

$arr = new SuperArray(); 
$arr['dim1']['dim2'] = 'ok'; 
var_dump($arr); 
?>
В php51 думаю скоро исправят.
 

Profic

just Profic (PHP5 BetaTeam)
Т.е. мой (исправленный - не то вставил) пример не работает на 5.0.4?
 

Opik

Новичок
Последний?
хм, работает.
надо проверить на деле :)

-~{}~ 14.11.05 20:55:

И на деле проверил. а всего то поменял способ инициализации объекта.

-~{}~ 23.12.05 14:21:

В 5.1.1 не исправлено =/
 

Profic

just Profic (PHP5 BetaTeam)
И, к сожалению, скорее всего не будет. Как мне ответил один из разработчиков, такое поведение by design. Остается только возвращать в __get() объект, также реализующий ArrayAccess.
 
Сверху