Использование одного класса внутри другого

x-yuri

Новичок
В таком случаем кроме риска затереть глобальную переменную, есть ли ещё минусы её использования?
в случае с БД ты один раз присваиваешь значение, а потом используешь. Т.е. ты должен быть уверен, что перед тем, как ты присвоил ей значение, никто не сможет его прочитать. Если же ты присваиваешь значение не в одном месте, то ты рискуешь получить запутанную логику с редко проявляющимися ошибками

то есть в моём случае если я переменную $DB объявляю глобальной, этот вариант выглядит так
/* @var $GLOBALS['DB'] MySUBD */
я так не пробовал - попробуй. Я имел в виду
PHP:
$a = new MySUBD();
/* @var $a MySUBD */
$a-> // с этого место должно заработать
или
PHP:
class A {
/* @var $db MySUBD */
private $db; // в методах класса должно работать
}
достаточно if($this->db), если ты не боишься, что в $db будет что-то отличное от объекта

3) лучше придерживаться названий, принятых в паттерне (mySUBD -> getInstance|get_instance) - другим будет понятнее, да и тебе, если вернешься к этому проекту. И тем более не называть синглтон фабрикой. Это просто будет создавать ложное впечатление.
Кроме того, у тебя поле $db никогда не присваивается, поэтому при каждом обращении к БД будет создаваться новый объект
В-четвертых, можно объединить Factory и MySUBD, сделав конструктор приватным

Нужна безопасность, что посоветуете. Я предполоажу допустим создать хотя бы трёх пользователей разных типов и грантовать им разные права.
чего ты этим добъешься? Это будет как вторая защита (т.е. защита от твоих ошибок в приложении, причем не любых ошибок, а тех, которые разрешают пользователю превысить свои полномочия). С другой стороны это усложнит сайт (на практике всегда появляются нюансы, о которых ты не подумал). И тут ты должен себе задать себе вопрос "А нужно ли оно тебе". Я могу только посоветовать: делай проще, если не знаешь зачем сделать сложнее

-~{}~ 29.01.09 23:03:

register_globals к озвученной проблеме никак не относится.
это тоже никоим боком к теме не относится
triumvirat ты бы обосновывал свои утверждения что ли ;-)

-~{}~ 30.01.09 00:57:

zerkms как на php 4 или Javascript реализовать синглтон, чтобы он гарантировал создание одного объекта? как проводить модульное тестирование без возможности задать объект БД извне?
 

zerkms

TDD infected
Команда форума
x-yuri
php4 давно не существует, а раздел называется "Вопросы по программированию на РНР".
 

zerkms

TDD infected
Команда форума
x-yuri
не заметил.

как проводить модульное тестирование без возможности задать объект БД извне?
тогда называйте полученное решение своими именами, но это не синглтон.
 
Сверху