![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
мухр |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 11.8.2005 Репутация: нет Всего: нет |
Как это можно осуществить? Смотрел Reflection API, но так и не нашёл. Это сообщение отредактировал(а) мухр - 16.12.2007, 03:35 |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
как мне кажется, невозможно в принципе. а если две переменных будут ссылаться на один и тот же объект - надо будет выводить две строки? А если полсотни переменных?
|
|||
|
||||
мухр |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 11.8.2005 Репутация: нет Всего: нет |
Если не ошибаюсь, один объект не может иметь несколько имён. Мы пока говорим об имени объекта, а не о ссылках на него, если вы это имеете в виду:
Я хочу избежать необходимости создавать окружение. Возможно ли завязать все процессы внутри объектов, чтобы можно было на произвольном уровне определить в том числе, кто породил данный объект, каким другим объектом вызван данный объект, какой объект стоит надо всем, внутри которого всё осуществляется и др.? Я хочу отказаться от global и оперировать по возможности относительными категориями. Это сообщение отредактировал(а) мухр - 16.12.2007, 04:42 |
||||
|
|||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: -2 Всего: 32 |
А оно надо, вообще, знать имена элементов программы?
для отладки поможет debug_backtrace, а для функционала - это, имхо, порочный подход. |
|||
|
||||
WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: 1 Всего: 8 |
а зачем оно вообще надо?
мне кажется можно сделать по-другому ![]() |
|||
|
||||
мухр |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 11.8.2005 Репутация: нет Всего: нет |
А оно вообще надо! Этот порочный подход в свою очередь используется в Action Script и, стало быть, во многих первообразных средах программирования - в особенности на основе ООП. И что нельзя никак имя объекта заполучить? Что-то не верится. Расскажите. Это сообщение отредактировал(а) мухр - 16.12.2007, 16:18 |
|||
|
||||
SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 2 Всего: 401 |
ActionScript (до 3-ей версии) - не ОО-язык в традиционном понимании. В ООП сабж в кошмаре не приснится, ибо нарушает первую из его основ - инкапсуляцию. Объект знает лишь о том, что передали лично ему, но не обязан и даже не имеет права знать, как его самого обзывают другие (вышестоящие). Имхо, этого и в жизни никому лучше не знать, а то вообще всем работать расхочется... ;) Сначала хотелось бы услышать формулировку задачи, потребовавшей такого странного решения... -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
мухр |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 11.8.2005 Репутация: нет Всего: нет |
Задача стоит следующим образом. Запускаем контроллер, сообщаем ему некоторые параметры, на базе которых создаётся некоторое внутреннее окружение, которое передаётся по цепи всем остальным объектам, инстанцированным внутри этого контроллера и ниже. Чтобы можно было запустить несколько контроллеров единовременно и параллельно под разными именами (или, допустим, вызвать контроллер из контроллера), и чтобы их окружения никак не пересекались.
Единственное решение мне видится пока, это передавать по цепи некоторый объект $ENV, содержащий все необходимые переменные окружения, но мне это кажется не очень удобным, так как приходится следовать некоторому соглашению в правиле написания классов объектов, используемых внутри контроллера. Это сообщение отредактировал(а) мухр - 16.12.2007, 17:56 |
|||
|
||||
Anarki |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 326 Регистрация: 14.3.2005 Репутация: 1 Всего: 11 |
мухр,
Вы определитесь, что имеете ввиду под именем объекта. Я считаю, что такой категории не существует. Есть имя класса, может быть атрибут объекта "имя" Если я правильно вас понял
$simpleTest - это в первую очередь переменная, которая хранит ссылку на объект(PHP5) а не имя объекта. Чтобы перестать использовать global... Как я вижу это можно сделать, не привязываясь к именам переменных. 1. Передавать используемые объекты в конструктор класса.
2. В ZF сделано так, не знаю паттерн ли Registry это или нет. Там существует вспомогательный класс(который представлен единственным объектом в программе - simgleton).
Дальше по коду можно использовать объект Zend_Config_Ini ($config) и другие объекты так:
Это класс со статическими методами, синглтон, имеющий хранилище ссылок на объекты, представленное в виде ассоциативного массива, доступ к которому обеспечивается методами set и get. Думаю это несложно реализовать. |
||||||||
|
|||||||||
vasac |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1060 Регистрация: 4.5.2006 Репутация: нет Всего: 36 |
Во-первых, данный пример так же вполне реален и показывает возможность двух ссылок на одно значение. Во-вторых, в php5 как и во всех современных ООП-языках, значением переменной объектного типа является ссылка на объект. Т.е.
даст две переменные, ссылающиеся на один объект. Нельзя, потому что у объекта нет имени. Оно есть у переменных и свойств. В некоторых системах, возможно, и требуется привязывать объект к имени, но это уже реализуется в самой системе своими средствами. Уверен и в AS это сделано не на уровне языка. |
||||
|
|||||
мухр |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 11.8.2005 Репутация: нет Всего: нет |
Anarki, c первым понятно, а вот второй способ, мне кажется, не совсем то, потому что приходится подставлять разные имена в set и забирать через get, соответственно, указывая всё явным образом. Получается как бы два разных кода и две разные конструкции, но речь идёт про одинаковые конструкции, поведение которых различается от различных входящих параметров, переданных через конструктор или ещё как-нибудь.
Если я всё до конца улавливаю. Это сообщение отредактировал(а) мухр - 16.12.2007, 18:19 |
|||
|
||||
мухр |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 11.8.2005 Репутация: нет Всего: нет |
Тяжело понять это место. Мы имеем отдельное хранилице, в котором регистрируем ссылки на объекты, но как мы потом узнаем, какому объекту принадлежит данная ссылка, если мы имеем несколько экземпляров одного класса с разными ссылками соответственно. Как осуществляется механизм обратной идентификации? |
|||
|
||||
мухр |
|
||||||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 11.8.2005 Репутация: нет Всего: нет |
Разве что вот так, но будет ли это работать? Добавлено через 7 минут и 40 секунд Дубль два. Ещё проще.
А наверное, в регистрацию ещё можно добавить имя класса, чтобы число итераций уменьшить. |
||||||||||||
|
|||||||||||||
Fally |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 17.8.2006 Где: Dahla Репутация: нет Всего: 4 |
символические ссылки используй для таких целей... но ИМХО, не зачем объекту знать как его звать.
|
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 8 Всего: 261 |
Скорее в некоторых языках у объекта есть свойтво Name, в которое IDE сама закатывает имя переменной, ну или ручками... |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Для профи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |