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 будет что-то отличное от объектаif($this->db===null)
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 реализовать синглтон, чтобы он гарантировал создание одного объекта? как проводить модульное тестирование без возможности задать объект БД извне?