Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> массив глобальных переменных, в каком хранить данные? 
:(
    Опции темы
Echo
Дата 15.1.2007, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 14.2.2006

Репутация: нет
Всего: нет



Напишите, как вы организуете хранение данных, доступность которых требуется из всего скрипта.
Т.е. как лучше всего хранить данные, к которым должна быть возможность обратиться из любых точек скрипта - в том числе из подключенных файлов и классы.

массив $GLOBALS не хотелось бы использовать т.к. в нем изначально много данных и , например , при отладке трудно отделить свои переменные от созданных PHP. 
Что касается создания своего глобального массива - то каждый раз объявлять его внутри всех функций как глобальный - требует по-крайней мере внимательности еще и на это.

Можно ли использовать для таких целей $_ENV? Или как лучше?..
PM MAIL   Вверх
skyboy
Дата 15.1.2007, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



я "глобальные" данные передаю параметром там, где вызов функций.
там, где происходит include, доступность и так есть.
PM MAIL   Вверх
mishaSL
Дата 15.1.2007, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



Если у тебя все на классах, то можешь в конструктаре каждого класса объявлять, если же нет, то придется в каждой функции либо объявлять global, либо передавать параметром. А константы объявляешь(define), и они доступны во всем скрипте. 


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
Mal Hack
Дата 15.1.2007, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Использование глобальных переменных считается плохим тоном и ошибкой проектирования.
PM ICQ   Вверх
BobiKK
Дата 15.1.2007, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 655
Регистрация: 1.12.2005
Где: Essen, Deutschlan d

Репутация: 4
Всего: 16



PM MAIL   Вверх
Echo
Дата 15.1.2007, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 14.2.2006

Репутация: нет
Всего: нет



Цитата(Mal Hack @ 15.1.2007,  18:17)
Использование глобальных переменных считается плохим тоном и ошибкой проектирования.

допустим в прологе обрабатываем полученные от пользователя данные и создаем на основе них переменные (с новыми именами), описывающие фильтр и источники данных, либо пустые, если от юзера пришла какая-нибудь ерунда.
ну и хотелось бы что бы при вызове других классов всегда можно было обратиться к источнику данных изнутри.
есть негатив в таком подходе?
PM MAIL   Вверх
skyboy
Дата 15.1.2007, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(Echo @  15.1.2007,  17:56 Найти цитируемый пост)
обрабатываем полученные от пользователя данные и создаем на основе них переменные

про сессии слыхал чего?
PM MAIL   Вверх
Echo
Дата 15.1.2007, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 14.2.2006

Репутация: нет
Всего: нет



skyboy, и зачем?
речь о пределах одного запроса пользователя
PM MAIL   Вверх
Mal Hack
Дата 15.1.2007, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Echo, я не хочу вдаваться в дискуссию касательно того, что лучше, что хуже.
Использование ГП ведет к ввозможным ошибкам и т.п. Само собой при решении задач иногда бывает нужно это сделать и ничего плохого в этом не будет, но вот злоупотреблять этим - себе дороже.


PM ICQ   Вверх
sergejzr
Дата 15.1.2007, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 5
Всего: 360



Самым лучшим решением считаю статические мемберы класса. Для отладки самое то, имена не могут пересекаются и некоторые ИДЕ (например эклипса) могут их подсказывать. Вообще идея из JAVA, где такой паттерн уже давно используется.

Код

class Container
{
   private static $value1="somestaticval1";
   public static function getValue1()
   {
      return $value1;
   }
   public static function setValue1($value)
   {
       Database::value=$value1;
   }

private static $value2="somestaticval";
     //  :
     //  :
     //итд, итп

}

print Container::getValue1();


Цитата(Mal Hack @  15.1.2007,  17:17 Найти цитируемый пост)
Использование глобальных переменных считается плохим тоном и ошибкой проектирования. 

Это верно, но иногда ИМХО есть смысл, если в приложении больше одного обьекта не существует.
Например connection к базе данных, или темплейт для генерации страниц, или обьект - переводчик, или обьект для логгинга ошибок. (В принципе только эти четыре мне и попадались)



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Mal Hack
Дата 15.1.2007, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



sergejzr, а в таком случае можно их как ссылкой в свойство класса занести из того, откуда вызываются
PM ICQ   Вверх
sergejzr
Дата 15.1.2007, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 5
Всего: 360



Кстати и константы можно так определить

Код

class Container
{
public static final $SOME_CONSTANT="somestaticval1";

//...



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Diesel Draft
Дата 18.1.2007, 04:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: 1
Всего: 5



Я использую Фреймворк. Там глобальные данные предназначены только для настоек самого Фреймворка. Я согласен с Mal Hack  что это плохой тон в программировании


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Echo
Дата 21.1.2007, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 14.2.2006

Репутация: нет
Всего: нет



sergejzr, да, спасибо.
теперь изучаю smile
идея очень понравилась 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0902 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.