![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| nmc |
|
||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 7.4.2009 Репутация: нет Всего: -1 |
Доброго времени суток!
Как использовать единственный объект в разных php файлах( одного и того же сайта, конечно) ? Есть класс для работы с БД. Первый вариант в файле set.php создаем объект
В index.php подключать файл через include
то так объект создается каждый раз заново или используется один? Если так
то что меняется (в смысле вопроса темы) Второй вариант в файле set.php создаем объект и записываем его в сессию
В чем недостатки второго варианта?? P.S. Какой оптимальны вариант для работы с единственным объектом класса ??? Это сообщение отредактировал(а) nmc - 18.8.2010, 16:58 |
||||||||
|
|||||||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
ну, сколько раз подключал файл set.php, столько и создавался согласно приведённому контексту global совершенно бессмысленная операция. она ничего не делает а смысл? чем обычная переменная не угодила? зачем его записывать в сессию? |
|||
|
||||
| overmet |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 15.8.2009 Где: Gomel Репутация: -2 Всего: -2 |
я не понял bars80080, почему бессмысленная операция? |
||||
|
|||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
||||
|
||||
| ZneP |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 15.7.2008 Где: Россия, Москва Репутация: нет Всего: нет |
Файл set.php будет подключаться только 1 раз в index.php, следовательно, при каждом обновлении страницы будет создаваться новый объект.
Ну во первых, при каждом обновлении страницы объекты будут создаваться по новому. Во вторых, использовать глобальные переменные - плохая идея. Вообще нужно стараться избегать их. Почему? Да потому, что глобальные переменные можно изменить откуда угодно, а в серьезном проекте это очень сложно отследить. Еще один минус, то что может много времени уйти, чтобы понять, почему не работает та или иная функция. Когда много программируешь (особенно если проект большой, сложный), бывает забываешь, что эта переменная глобальная или не обращаешь внимания, что она не подключается в функции. Из-за этого, когда что-то не работает и при этом ошибок никаких нет, подозрения на эту переменную в основном не падают и уходит много времени, чтобы найти причину. То же, что и с глобальными переменными. Вот например схема. Есть базовый класс. В нем создаются все необходимые объекты других классов, таких как класс по работе с Пользователями, класс по работе с БД, класс Обработки ошибок и тд. Все эти переменные инициализируются в функции main. Далее идет разбор get-параметров, в которых передается имя модуля, который нужно загрузить. В этом же базовом классе идет подключение этого модуля и управление передается уже классу из этого модуля. Классы в модулях наследуются от базового класса, тем самым получаем доступ к объектам родительского класса. Никаких глобальных переменных. Все красиво и по правилам ООП |
|||
|
||||
| NLspieler |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 619 Регистрация: 13.10.2008 Где: Берлин Репутация: 16 Всего: 19 |
Можно ли самому сделать супер-глобальную переменную, что бы она была глобальной, при этом,
что бы не нужно было прописывать в каждой функции/методе, которые ее используют global $var ; ? |
|||
|
||||
| overmet |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 15.8.2009 Где: Gomel Репутация: -2 Всего: -2 |
сча найду еще интерестных примеров
google.ru/codesearch/ хороший поиск кода Это сообщение отредактировал(а) overmet - 18.8.2010, 23:14 |
||||||
|
|||||||
| Vasay |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2097 Регистрация: 8.3.2006 Репутация: 1 Всего: 73 |
nmc,
Есть паттерн Singleton . Однако в случае с PHP, Singleton живет в рамках одного запроса. Так как время жизни PHP приложения - время обработки одного запроса. Если объект хочется расшарить между запросами - его надо куда-то сериализовать. Сериализация объекта в сессию возможна, но тогда он будет доступен только в рамках сессии. -------------------- Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны. |
|||
|
||||
| nmc |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 7.4.2009 Репутация: нет Всего: -1 |
Есть 10 страниц в каждой из них нужна работа с базой данных. И что бы не создавать один объект много раз (при обновлении страницы ведь снова создается этот объект) записать этот объект класса для работы с базой данных в сессию.
В сессии он существует пока оттуда не будет удален. В чем недостаток такого простого варианта????
При перезагрузке(обновлении) страницы объект удаляется и создается снова? |
||||||
|
|||||||
| Vasay |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2097 Регистрация: 8.3.2006 Репутация: 1 Всего: 73 |
nmc,
С сессиями не все так просто. Погугли на тему "php Storing objects in a session". А так же на тему __sleep and __wakeup
Все приложение на PHP живет только во время обработки одного запроса. Т.е. все объекты при каждом запросе вновь создаются, инициализируются, потом умирают. Хочешь что-то сохранить - файлы, база, какие-нибудь кэшеры... -------------------- Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны. |
||||
|
|||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
недостаток в том, что во-первых, выигрыш ещё вилами по воде написан. что быстрее, считать объект и распаковать его из сессии или создать снова? в каждом отдельном случае надо считать и главное, загромождение памяти. сколько должна существовать эта сессия? сколько места на сервере это займёт? |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |