уже год пользовался самописным классом в котором идентификатор соединения объявил статикой: PHP: <?php class mySQL { private static $connection; public function __constructor($db="",$user="root",$pass="",$host="localhost"){ if(!self::$connection) { self::$connection = mysql_connect($host, $user, $pass); $db_name=$db; if(!self::$connection throw new MySQLconection_Exception('при соединение с сервером базы данных'); if($db != "") $db = @mysql_select_db($db); if(!$db) throw new MySQLconection_Exception('при выборе базы - "'.$db_name.'"'); mysql_query('SET NAMES "utf8"', self::$connection); } } ................ } [index.php] $db = new mySQL('some','admin','123','localhost'); [some.php] $db = new mySQL(); [some2.php] $db = new mySQL(); .... то есть первый раз вызывал класс и указывал параметры соединения, а потом просто класс без параметров собственно было удобно считал что я могу внутри класс хранить даже ресурс запроса и он не пересечется с запросом вызванным в другом файле - классе .... но есть парадигма singleton + которой в единственном экземпляр класса (также установка соединения один раз и в любом месте можем без параметров его получить) но вот ресурс запроса хранить в нем уже бесмысленно ... есть какие нибудь еще мысли за и против?
На каждый скрипт свой mysql_connect и mysql_query относится к своему коннету в каждом скрипте. На протяжении скрипта mysql_connect возвращает один и тот же коннект. А вообще обычно для запросов-выборок делают что mysql_query вобвращет результат запроса для нужно объекта и хранится в нём же, тоесть делают класс так: PHP: <?php class User { public function __construct() { $this->_QueryData = Db::Query('Select ....'); } } //------------------ public static function Query($Sql) { return mysql_query($Sql, self::_Connetion); } Как то так...
да но я показал упрощенный пример ... вообще создание нового класса или получение инстанса от сингелтона я использую в классах - и вот там у меня бывают перекрашивающиеся запросы гм что именно не понял ? Костян - у тя класс статичный! .... гм я как-то хотел наоборот чтобы это был нормальный класс .. хотя готов рассмотреть этот вариант
nimistar Какая разница какой класс? mysql_connect итак даёт синглтон по соединению. Запросы могут у тебя пересекаться в одном скрипте лишь в том случае если они не буферезированные, а это от классов вообще не зависит.
так ладно ... отклонились от темы - пересечение запросов неудачный пример с моей стороны ... абстрактно - я после каждого запроса внутри класа храню last_insert и/или numrows и sql вид последнего запроса считал это удобством - сейчас задумался, может сингелтон класса лучше ?
зачем, его обычно сразу получают если надо ( last_insert). numrows - хранится в объекте модели или типа того... и опять же причём тут синглтон.... А я понял - лучше синглтон если всё нормально сделаешь.
Костян - да сделано давно... просто решил пересмотреть свое возрение ... класс ДБ сингелтоном делать или коннешон статикой ... и то и другое удобно ... и есть лишь маленькие нюансы
Нелья мешать статику и объекты. В данном случае вам или синглтон или фабрика. Статика, имхо, применение для неких утилит "хелперов", когда точно не нужны никакие инстансы. Ну и для реализации самого синглтона DB сюда никак не вписывается, так что - синглтон. Потом уже, если понадобится работать с двумя и более разными соединаниями, легко переходите к фабрике.
все. Что именно ты хочешь получить, какие у тебя в этом затруднения и т.д. Если из раздела "а поговорить?" - непонятно о чем ты хочешь поговорить
MiksIr - спасибо жаль конечно что никого не тронул и обсуждения не вышло ... но собственно уже проект перевел на синглтон
а чего тут трогать? хочешь не зависеть от места вызова? так оно или $db = MySQL::getInstance(); или $db = Tools::getInstance('MySQL');
440Hz он до конца не понимает о чём говорит, поэтому и сформулировать нормально не может, ну что это за название топика, капец...
Формулировки чего? Я вот, например, так и не понял что ты хочешь И надо сказать, я далеко не самый глупый человек
Он сделал что-то похожее на синглетон. Объявил ресурс коннекта статиком и проверяет всегда, а есть ли коннект, если есть, то не коннектить заново. Но это не синглетон. Синглетон не плодит объекты.
хуйня это, а не идея... =) есть или синглетон или фабрика. ну или некие модификации реализации, но не подхода. остальное от непонимания происходящего или неопытности или просто дурак, но это по жизни.
я это сделал этак 4 года назад .... класс дб использую уже 7 лет ... (сначала по глобалу , потом по ссылке, потом вот коннект статикой) теперь вот перехожу на сингелтон ... мотивация на момент перехода была слабой вот и полез сюда чтоб мотивировали "хуйня это, а не идея... " и "дурак, но это по жизни", на мотивацию вряд ли тянут .... кроме как ощущения что меня оскорбляют других выводов вынести не получается
Как-то цель совсем непрозрачная из темы топика Пользуйся Factory или Registry (тот же синглтон только вид сбоку). Первый дает много разных баз, второй много активных коннектов и историю запросов Eсли нужно все сразу, то совмести первое со вторым.
у тебя в любом случае выводов не получается вынести. Другие сообщения ты что не читал??? Что значат слова "коннект статикой"? По-моему это
параноя это ... можно конечно писать - "Объявление переменной хоронящий идентификатор соединения с базой статичным атрибутом класса" - но мне лень ... дифирамбов не сочиняю ... П.С.: сами дураки ...