Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Extensions > объект как массив |
Автор: jzZ 20.8.2006, 13:57 |
Собственно САБЖ, но не надо ссылок на официальную документацию по SPL, я там читал, но мой английский плох, так что я почти ничего не понял. Лучше на русском, может статейка у кого какая есть ![]() Кокректно интересует как обращаться к св-ву объекта так: $obj['a'], работа с объектом как с обычным массивом при помощи функций т.е. array_flip итд. Заранее благодарен! |
Автор: ewolf 20.8.2006, 17:28 | ||
к свойству объекта можно обратится как
|
Автор: jzZ 20.8.2006, 19:40 | ||
ewolf оффтоп... Я говорю об этом
Добавлено @ 19:45 Как добиться такого эффекта + использование стандартных функций для работы с объектом как с массивом?! Насчет функций я вообще неуверен возможно ли это, но точно знаю что возможно использовать foreach для объекта типа так: foreach($obj as $k => $v) Об этом прочитать можно тут http://ru.php.net/SPL Жду помощи, знатоки откликнитесь... |
Автор: Mal Hack 20.8.2006, 21:44 |
jzZ, что ты вообще пытаешься сделать? |
Автор: jzZ 20.8.2006, 22:55 | ||
Я просто хочу разобраться в новых фичах php5. А для наглядного примера, допустим так:
Код взят отсюда: http://qdp.ru/2006/06/17/print:page,1,include_v_php.html Для начала можно было бы реализовать это в классе, причем индекс массива $pages и будет нашим свойством. |
Автор: Mal Hack 20.8.2006, 23:18 |
Какое именно? |
Автор: jzZ 21.8.2006, 10:17 | ||||
Mal Hack
Что значит какое именно, ВО ВСЕХ!!! там множественное число... А сейчас кокретно меня интересует доступ к объекту как к массиву, читай тему, и просьба больше не оффтопить... |
Автор: Vaulter 21.8.2006, 10:30 | ||
jzZ, хм... слышал только о таких методах
читай про overload() функцию |
Автор: Mal Hack 21.8.2006, 12:43 |
Неперь покажи мне, где об этом писалось... Первый раз в жизни слышу. Это по сути бред, на самом деле... Глянь сюда: http://forum.vingrad.ru/index.php?showtopic=107059&hl= |
Автор: jzZ 21.8.2006, 15:28 | ||
Vaulter А зачем методу __get() возвращать просто true? Тем более что вызов неопределенной переменной будет таким: $obj->property; То зачем нужен какой-то сторонний массив elum? Я говорю о таком вызове
Mal Hack Об этой ссылке я знаю, если ты не заметил в этом посте был и я ) Совсем не бред, если бы ты внимательно прочитал код предоставленный imm, и прислушался бы к моим утверждениям там (твоя ссылка), ты бы все понял. Писалось между прочи именно там http://forum.vingrad.ru/index.php?showtopic=107059&st=0 Добавлено @ 15:30 щас колдую над наглядным примером... |
Автор: jzZ 21.8.2006, 16:04 | ||
Что типа наглядного примера или 'я же вам говорил'. Перечитал документацию по arrayaccess, однако все равно не понял действия абстрактных методов в интерфейсе arrayaccess.
Если кто знает как перебрать объект как массив, буду очень благодарен примеру. |
Автор: Alone 21.8.2006, 16:43 | ||
Э... не успел... Единственным вариантом для тебя будет перебор (ессесно рекурсивный) объекта и создание массива. (Я не спрашиваю зачем это тебе надо)
|
Автор: ewolf 21.8.2006, 17:32 |
Так как речь идет о php 5, то возможно тебе поможет вот это http://www.php.net/manual/ru/language.oop5.iterations.php В этом случае можно, по крайней мере упростить пример Alone |
Автор: Alone 21.8.2006, 17:39 |
Нет. Существенно ничего не поменяется. Вернее даже абсолютно ничего не поменяется, так как перебор в обоих случаях основан на foreach |
Автор: jzZ 21.8.2006, 20:26 |
Alone Пример хорший, взял на заметку спасибо. Нафлужу 100 постов кину + ewolf Спасибо за ссылку(информативно и на русском) конечно проще, но у alone креативней ![]() Добавлено @ 20:28 Пока все не разбежались, хотелось бы узнать возможно ли заставить объект крутиться так же как массив, допустим вызовом того же array_map |
Автор: Alone 22.8.2006, 10:41 | ||
Э... недопонял... Ты хочешь к свойствам объекта применить callback функцию? |
Автор: jzZ 22.8.2006, 12:15 |
Alone, Да, возможно ли? |
Автор: skyboy 29.8.2006, 03:16 |
[OFF] jzZ, странные желания ![]() ![]() [/OFF] Коль сам соберёшь массив свойств - так и обрабатывай его, как знаешь... |
Автор: Alone 30.8.2006, 09:55 | ||
Ну, как подсказывают выше, самым что ни на есть противоестественным путем ![]() Перегоняешь объект в массив, применяешь к нему калбекфунк. а потом обратно перегоняешь массив в объект... Только вот одно меня чешет: анакойхер это тебе надо? ![]() ![]() |
Автор: jzZ 30.8.2006, 18:33 |
Alone Ну может это покажется странным, но так... на досуге пробую изобрести какой-нибудь интересный метод кэширования на основе классов, вот заодно эксперементирую с ООп в php5 |
Автор: Opik 31.8.2006, 11:32 | ||
А тут все просто. Есть такой интерфейс - ArrayAccess. Пользоваться им очень легко:
|
Автор: IZ@TOP 4.9.2006, 21:13 |
jzZ, используй интерфейсы Iterator, ArrayAccess и у тебя все получится. |