![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 8 Всего: 261 |
Сабж заключается в чем. Через __get( $name ) делаем перегрузку, обрабатывая обращение к несуществующим свойствам объекта.
Препдоложим, есть вызов: $a = $this->LNG['index']. Свойства LNG в объекте нет. В __get имеем только $name == "LNG". Вопрос заключается в том, как можно получить имя индекса, тобишь "index". |
|||
|
||||
jzZ |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 17.7.2006 Репутация: 1 Всего: 2 |
Возможно я ошибаюсь, но тут идет обращение к переменной внутри класса, она реализует лишь описание объекта. метод __get() вызывается при попытке прочитать значение неопределенного свойства. Кажется правильно будет вызывать несуществующие свойства так: obj->LNG = "blabla"; т.е. уже после определения самого объекта, а внутри не знаю, хотя может быть LNG это уже переменная к-рой было передано св-во из объекта из другого класса? Ну это лишь мои (возможно неправильные рассуждения), попробуйте конкретней описать ситуацию. А если речь идет о инициализации неизвестного св-ва по ключу в массиве т.е. так:
то тут надо воспользоваться интерфейсом ArrayAccess, который поставляется с SPL. Добавлено @ 17:48 точное описание ArrayAccess и его методов |
||||
|
|||||
Mal Hack |
|
||||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 8 Всего: 261 |
Ну как не обращение к несуществующему свойству? LNG через var не описывался.
Это уже __set будет. |
||||
|
|||||
jzZ |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 17.7.2006 Репутация: 1 Всего: 2 |
Это ж только пример, если хотите только __get(), тогда так: $a = obj->LNG; Я просто хотел показать, что если метод __get() реализован в том же классе, в котором вы обращаетесь к несуществующей переменной LNG, не должен работать. По принципу должен работать, если вы обращаетесь к несуществуещему св-ву уже самого объекта т.е. так $obj->LNG. Добавлено @ 18:09
Придется обращаться так $obj[index]; за пределами класса реализующего метод __get() К сожалению сейчас нет возможности проверить свои слова за php, о пределах действия __get() Это сообщение отредактировал(а) jzZ - 6.8.2006, 18:09 |
||||
|
|||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 8 Всего: 261 |
Ты ошибаешься. __get работает так, как я описал выше. Это 100% проверенно.
Я через this обращаюсь, и такой синтаксис будет 100% ошибочным. |
|||
|
||||
jzZ |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 17.7.2006 Репутация: 1 Всего: 2 |
Невнимательность... Чтобы обращаться как я сказал
|
||||
|
|||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 8 Всего: 261 |
МНе надо все стандартными средствами сделать без лишних телодвижений.
Система переносима должна быть. |
|||
|
||||
jzZ |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 17.7.2006 Репутация: 1 Всего: 2 |
Я не ошибаюсь, только что все сам проверил, просто мы не поняли друг друга. Ты говорил о том что и я только другими словами. Не понимаю чего ты хочешь, сложно сказать без какого-либо кода.
отсюда: http://ru.php.net/manual/en/language.oop5.overloading.php Добавлено @ 19:45 Это если ты имя хочешь получить, а если работать с объектом как с массивом, то только с помощью SPL. |
||||||
|
|||||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 8 Всего: 261 |
Вот по твоему примеру. В $nm я получаю LNG. При вызове
$a = $this->LNG['index'] Массива X у меня нет. Мне надо вернуть: К примеру $b->LNG['index'] так вот имя индекса я НЕ МОГУ ПОЛУЧИТЬ. |
|||
|
||||
imm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 27.7.2005 Репутация: нет Всего: 1 |
|
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 8 Всего: 261 |
НИчего не понял. Конструктор полуает один параметр, но ты его ниоткуда не передаешь..
ЗЫ: Решить задачу надо через __get или встроенные уже в модель ООП методами. |
|||
|
||||
jzZ |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 17.7.2006 Репутация: 1 Всего: 2 |
Mal Hack
SPL поставляется вместе php5 он и является стандартным ООП решением, не нужно изобретать колесо, читай ссылку что я дал. imm привел наглядный пример его реализации.
это ты получишь работая с ArrayAccess, не иначе как. |
|||
|
||||
imm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 27.7.2005 Репутация: нет Всего: 1 |
В принцепи, подобная ситуация возникать не должна вовсе. Наверняка тебе нужно все классы, для объектов которых, может быть вызван метод LNG неследовать от какого-нибудь базового, в котором этот метод/член определен по умолчанию, или определена реакция на вызов этого члена, а в наследниках уже переопределять.
|
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 8 Всего: 261 |
Ребят, вы меня просто не поняли...
Ладно, обошолся более простым вариантом. |
|||
|
||||
imm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 27.7.2005 Репутация: нет Всего: 1 |
Приношу свои извинения за длительную задержку, но меня твоя проблема очень заинтересовала и я кой-чего написал. Кстати, если есть дерево (по которому мы будем ходить), то можно с помощью этой концепции реализовать что-то типа SimpleXML (я имею ввиду принцип доступа), вручную (а можно и красивее чем SimpleXML, только гора-а-аздо тяжелее
![]()
Это сообщение отредактировал(а) imm - 9.8.2006, 22:13 |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Для профи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |