За последние 24 часа нас посетили 22292 программиста и 1025 роботов. Сейчас ищут 728 программистов ...

класс Mysql как singleton или соединение в статику

Тема в разделе "MySQL", создана пользователем nimistar, 10 дек 2009.

  1. nimistar

    nimistar Активный пользователь

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    уже год пользовался самописным классом в котором идентификатор соединения объявил статикой:

    PHP:
    1. <?php
    2. class mySQL {
    3.   private static $connection;
    4.  
    5.   public function __constructor($db="",$user="root",$pass="",$host="localhost"){
    6.     if(!self::$connection) {
    7.         self::$connection = mysql_connect($host, $user, $pass);
    8.         $db_name=$db;
    9.         if(!self::$connection throw new MySQLconection_Exception('при соединение с сервером базы данных');
    10.         if($db != "") $db = @mysql_select_db($db);
    11.         if(!$db) throw new MySQLconection_Exception('при выборе базы - "'.$db_name.'"');
    12.         mysql_query('SET NAMES "utf8"', self::$connection);
    13.     }
    14.    }
    15.  
    16.    ................
    17.  
    18. }
    19. [index.php]
    20. $db = new mySQL('some','admin','123','localhost');
    21.  
    22. [some.php]
    23. $db = new mySQL();
    24.  
    25. [some2.php]
    26. $db = new mySQL();
    27.  
    28. ....
    29.  
    то есть первый раз вызывал класс и указывал параметры соединения,
    а потом просто класс без параметров
    собственно было удобно
    считал что я могу внутри класс хранить даже ресурс запроса и он не пересечется с запросом вызванным в другом файле - классе ....

    но есть парадигма singleton + которой в единственном экземпляр класса (также установка соединения один раз и в любом месте можем без параметров его получить) но вот ресурс запроса хранить в нем уже бесмысленно ...


    есть какие нибудь еще мысли за и против?
     
  2. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    На каждый скрипт свой mysql_connect и mysql_query относится к своему коннету в каждом скрипте. На протяжении скрипта mysql_connect возвращает один и тот же коннект.
    А вообще обычно для запросов-выборок делают что mysql_query вобвращет результат запроса для нужно объекта и хранится в нём же, тоесть делают класс так:
    PHP:
    1. <?php
    2. class User {
    3.  
    4.   public function __construct()
    5.   {
    6.      $this->_QueryData = Db::Query('Select ....');
    7.   }
    8.  
    9. }
    10. //------------------
    11. public static function Query($Sql)
    12. {
    13.  return mysql_query($Sql, self::_Connetion);
    14. }
    Как то так...
     
  3. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    nimistar
    some.php и some2.php инклюдются в index.php?
     
  4. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    А в чем собственно вопрос?
    Я что-то ничего не понял в этом потоке сознания :)
     
  5. nimistar

    nimistar Активный пользователь

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    да
    но я показал упрощенный пример ... вообще создание нового класса или получение инстанса от сингелтона я использую в классах - и вот там у меня бывают перекрашивающиеся запросы


    гм что именно не понял ?


    Костян - у тя класс статичный! .... гм я как-то хотел наоборот чтобы это был нормальный класс ..
    хотя готов рассмотреть этот вариант :)
     
  6. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    nimistar
    Какая разница какой класс? mysql_connect итак даёт синглтон по соединению. Запросы могут у тебя пересекаться в одном скрипте лишь в том случае если они не буферезированные, а это от классов вообще не зависит.
     
  7. nimistar

    nimistar Активный пользователь

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    так ладно ... отклонились от темы - пересечение запросов неудачный пример с моей стороны ...

    абстрактно - я после каждого запроса внутри класа храню last_insert и/или numrows и sql вид последнего запроса
    считал это удобством - сейчас задумался, может сингелтон класса лучше ?
     
  8. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    зачем, его обычно сразу получают если надо ( last_insert). numrows - хранится в объекте модели или типа того... и опять же причём тут синглтон.... А я понял - лучше синглтон если всё нормально сделаешь.
     
  9. nimistar

    nimistar Активный пользователь

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    Костян - да сделано давно... просто решил пересмотреть свое возрение ...
    класс ДБ сингелтоном делать или коннешон статикой ... и то и другое удобно ... и есть лишь маленькие нюансы
     
  10. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    nimistar
    не понятно что ты хочешь? тебе просто поговорить захотелось?
     
  11. nimistar

    nimistar Активный пользователь

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    Костян - угу - на указанную тему... ;-)
     
  12. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.340
    Симпатии:
    44
    Нелья мешать статику и объекты. В данном случае вам или синглтон или фабрика.
    Статика, имхо, применение для неких утилит "хелперов", когда точно не нужны никакие инстансы. Ну и для реализации самого синглтона ;)
    DB сюда никак не вписывается, так что - синглтон. Потом уже, если понадобится работать с двумя и более разными соединаниями, легко переходите к фабрике.
     
  13. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    все.

    Что именно ты хочешь получить, какие у тебя в этом затруднения и т.д.

    Если из раздела "а поговорить?" - непонятно о чем ты хочешь поговорить :)
     
  14. nimistar

    nimistar Активный пользователь

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    MiksIr - спасибо
    жаль конечно что никого не тронул и обсуждения не вышло ... но собственно уже проект перевел на синглтон :)
     
  15. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    а чего тут трогать?
    хочешь не зависеть от места вызова?
    так оно или

    $db = MySQL::getInstance();

    или

    $db = Tools::getInstance('MySQL');
     
  16. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    440Hz
    он до конца не понимает о чём говорит, поэтому и сформулировать нормально не может, ну что это за название топика, капец...
     
  17. nimistar

    nimistar Активный пользователь

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    Костян - приведи пример иной формулировки
     
  18. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Формулировки чего? :) Я вот, например, так и не понял что ты хочешь :)
    И надо сказать, я далеко не самый глупый человек :)
     
  19. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Он сделал что-то похожее на синглетон. Объявил ресурс коннекта статиком и проверяет всегда, а есть ли коннект, если есть, то не коннектить заново. Но это не синглетон. Синглетон не плодит объекты.
     
  20. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    хуйня это, а не идея...
    =)

    есть или синглетон или фабрика. ну или некие модификации реализации, но не подхода.

    остальное от непонимания происходящего или неопытности или просто дурак, но это по жизни.
     
  21. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    440Hz
    Согласен с тобой. Сам юзаю чистый синглетон и не парюсь.
     
  22. nimistar

    nimistar Активный пользователь

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    я это сделал этак 4 года назад .... класс дб использую уже 7 лет ... (сначала по глобалу , потом по ссылке, потом вот коннект статикой) теперь вот перехожу на сингелтон ... мотивация на момент перехода была слабой вот и полез сюда чтоб мотивировали :)
    "хуйня это, а не идея... " и "дурак, но это по жизни", на мотивацию вряд ли тянут .... кроме как ощущения что меня оскорбляют других выводов вынести не получается
     
  23. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Как-то цель совсем непрозрачная из темы топика :)

    Пользуйся Factory или Registry (тот же синглтон только вид сбоку).
    Первый дает много разных баз, второй много активных коннектов и историю запросов

    Eсли нужно все сразу, то совмести первое со вторым.
     
  24. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    у тебя в любом случае выводов не получается вынести. Другие сообщения ты что не читал???
    Что значат слова "коннект статикой"? По-моему это
     
  25. nimistar

    nimistar Активный пользователь

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    параноя это ...
    можно конечно писать - "Объявление переменной хоронящий идентификатор соединения с базой статичным атрибутом класса" - но мне лень ... дифирамбов не сочиняю ...

    П.С.: сами дураки ...