Форум → Программирование → PHP для идиотов → PHP и ООП → непонятки с ООП
непонятки с ООП
Страницы: ← Предыдущая страница • Следующая страница →
-
Фев. 10, 2010, 4:54 п.п., спустя 4 минуты 50 секунд
рhpdude, phpdude, воистину неделя дуда))))
рhpdude, тот, что Артеду. Так я с реальной и ебусь. Более того, мн за нее еще и деньги платят гы) -
-
Фев. 10, 2010, 5:45 п.п., спустя 50 минут 31 секунду
artedooo, :)
Платят мне за факт сделанной работы. Но ООП то надо учить ка нибудь =)
PS Посмотрите бегло упрощенный класс для работы с БД. Коннект, дисконект, выполнение запросов и настройки базы собирает с движков. Выполнять селекты мне будет не надо. Видимо только инсерт и апдейт. Если что - допишу еще. Не проблема. Мне главное узнать на сколько это правильно с точки зрения ооп. Ну и послушать, как дуд меня обосрет :D<?php class DB // Класс работы с базой данных { // Объявление членов класса protected $cms=""; protected $id=""; public $pref=""; protected $link=""; protected $host=""; protected $user=""; protected $pass=""; protected $base=""; // Тут подключаемся к базе выбранной кмс. public function __construct($cms = "DLE") { $this->cms = (strtoupper($cms) == "DLE") ? strtoupper($cms) : "SE"; $this->connect(); } // Тут закроем соединение с базой. public function __destructor() { $this->disconnect(); } // Коннект к базе private function connect () { $this->config(); $this->id = mysql_connect($this->host, $this->user, $this->pass); if (!$this->id) throw new Exception ("Не удалось подключится к базе."); if (!mysql_select_db($this->base, $this->id)) throw new Exception ("Не удалось найти выбранную базу данных"); $this->query("SET NAMES " . $this->charset . ";"); } // Закрытие соедиения с базой private function disconnect () { if(mysql_close($this->id)) throw new Exception ("Не удалось закрть соединение с базой."); } // Извлекаемм настройки подключения к базе. private function config () { if ($this->cms == 'DLE') { if (!require_once ("engine/data/dbconfig.php")) throw new Exception ("Не удалось найти файл конфигурации DLE."); $this->host = DBHOST; $this->user = DBUSER; $this->pass = DBPASS; $this->base = DBNAME; $this->charset = COLLATE; $this->pref = PREFIX . "_"; } elseif ($this->cms == 'SE') { if (!require_once (SE_FOLDER . "/include/database_config.php")) {throw new Exception ("Не удалось найти файл конфигурации SE.");} $this->host = $database_host; $this->user = $database_username; $this->pass = $database_password; $this->base = $database_name; $this->pref = "se_"; $this->charset = "UTF8"; } } // Выполение запросов public function query ($query) { if (!$this->id) throw new Exception ('Вы не были подключены к базе.'); if (!$this->link = mysql_query ($query, $this->id)) throw new Exception ("Не удалось выполнить запрос. Ошибка: ".mysql_error($this->id)); return $this->link; } // Уничтожаем объект в духе ООП :) public function destroy() { unset($this); } } ?>
-
Фев. 10, 2010, 6:32 п.п., спустя 46 минут 42 секунды
if(mysql_close($this->id)) throw new Exception ("Не удалось закрть соединение с базой.");
ниче странного не замечаешь ?Спустя 79 сек.+ у тебя есть метод query()
а где же метод fetch() ? -
Фев. 10, 2010, 6:37 п.п., спустя 4 минуты 39 секунд
Я не сразу вспомнил, что мне нужен фетч. Когда код кидал - думал, что будут только insert запросы делать. fetch напишу.
Странность пропустил. Спасибо. -
Фев. 10, 2010, 6:39 п.п., спустя 2 минуты 48 секунд
+ зачем в методе query() проверка линка ?
у тебя в конструкторе он уже проверяетсяСпустя 108 сек.ну и самое главное,
у тебя по всему проекту должна быть только одна сущность твоего обьекта DB.
ну или столько, сколько баз одновременно используется в проекте -
Фев. 10, 2010, 6:46 п.п., спустя 6 минут 41 секунду
2 базы используется одновременно. Их можно конечно по очереди, но пожалуй это не удобно будет.
проверка в методе query() - следствие дебага). Удалю. -
Фев. 10, 2010, 7:03 п.п., спустя 17 минут 8 секунд
ну и самое главное, у тебя по всему проекту должна быть только одна сущность твоего обьекта DB. ну или столько, сколько баз одновременно используется в проекте
NRG, я не очень понял то, что ты этим хотел сказать. Это какой то недостаток? Проверка нужна? -
Фев. 10, 2010, 7:05 п.п., спустя 1 минуту 41 секунду
SpartakuS, страшная у тебя аватарка, есть фото получше?https://smappi.org/ - платформа по созданию API на все случаи жизни -
Фев. 10, 2010, 7:10 п.п., спустя 5 минут 32 секунды
adw0rd, да она реально страшная. Я с разбитым еблом, пьяный в хлам и не помнящий всего действия происходящего там.
Ну а вообще я на фото плохо получаюсь и норм фотки у меня только по синей теме. =) Ну посмотрю. Может что еще поставлю) -
Фев. 10, 2010, 7:12 п.п., спустя 1 минуту 14 секунд
Спасибо :)https://smappi.org/ - платформа по созданию API на все случаи жизни -
Фев. 10, 2010, 7:15 п.п., спустя 3 минуты 2 секунды
я хотел сказать, что он должен быть синглтономну и самое главное, у тебя по всему проекту должна быть только одна сущность твоего обьекта DB. ну или столько, сколько баз одновременно используется в проекте
NRG, я не очень понял то, что ты этим хотел сказать. Это какой то недостаток? Проверка нужна?Спустя 164 сек.я твой класс вижу приблизительно таким<?php class NRG_Mysql { /** * Host to connect */ protected $_host = 'localhost'; /** * Database user */ protected $_user = 'root'; /** * User password */ protected $_pswd = ''; /** * Port number */ protected $_port = 3306; /** * Database name */ protected $_database = 'trunk'; /** * Mysql link identifier */ private $_linkIdentifier; /** * */ public function __construct() { try { $this->_linkIdentifier = @mysql_connect($this->_host . ':' . $this->_port, $this->_user, $this->_pswd); if (!$this->_linkIdentifier){ throw new Exception('Can\'t connect to host: ' . $this->_host); } if (!mysql_select_db($this->_database, $this->_linkIdentifier)) { throw new Exception('Can\'t use database: ' . $this->_database); } } catch (Exception $e) { echo '<b>Caught exception:</b> ' . $e->getMessage(); } } /** * Execute Query * * @param string $sql * @return NRG_Mysql */ public function query($sql) { $this->_queryResult = mysql_query($sql, $this->_linkIdentifier); return $this; } /** * Fetch query result by specified type * * @param string $type * @return mixed */ public function fetch($type = 'row') { $fetchFunction = 'mysql_fetch_' . $type; return $fetchFunction($this->_queryResult); } }
зы: не приебыватся, накидал на скорую руку, может и не работать, и пару методов упустил =) -
Фев. 10, 2010, 7:22 п.п., спустя 7 минут 12 секунд
и еще одно , твой класс DB не должен вообще ничего знать о существовании каких либо цмс или чтотам у тебя в методе config() ….
ты всеголишь должен сделать чтото типа NRG::getModel('core/config')->getDatabaseSettings();
а вот твоя модель конфига уже сама разбирается какие парметры для соединения отдавать -
Фев. 10, 2010, 7:31 п.п., спустя 8 минут 44 секунды
NRG, на счет последнего действительно упустил момент.
И вот вопрос. Как лучше?
В конструкте вызвать метод коннект или прямо там сделать код подключения? Или все равно? -
Фев. 10, 2010, 7:46 п.п., спустя 15 минут 34 секунды
коннект к базе делай в конструкторе
если вынесешь сам коннект в отдельный метод а его вызовешь в конструкторе то ниче страшного
Страницы: ← Предыдущая страница • Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!