Форум → Программирование → PHP для идиотов → PHP и ООП → непонятки с ООП
непонятки с ООП
Страницы: ← Предыдущая страница • Следующая страница →
-
10 февраля 2010 г. 16:54, спустя 4 минуты 50 секунд
рhpdude, phpdude, воистину неделя дуда))))
рhpdude, тот, что Артеду. Так я с реальной и ебусь. Более того, мн за нее еще и деньги платят гы) -
-
10 февраля 2010 г. 17: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 г. 18:32, спустя 46 минут 42 секунды
if(mysql_close($this->id)) throw new Exception ("Не удалось закрть соединение с базой.");
ниче странного не замечаешь ?Спустя 79 сек.+ у тебя есть метод query()
а где же метод fetch() ? -
10 февраля 2010 г. 18:37, спустя 4 минуты 39 секунд
Я не сразу вспомнил, что мне нужен фетч. Когда код кидал - думал, что будут только insert запросы делать. fetch напишу.
Странность пропустил. Спасибо. -
10 февраля 2010 г. 18:39, спустя 2 минуты 48 секунд
+ зачем в методе query() проверка линка ?
у тебя в конструкторе он уже проверяетсяСпустя 108 сек.ну и самое главное,
у тебя по всему проекту должна быть только одна сущность твоего обьекта DB.
ну или столько, сколько баз одновременно используется в проекте -
10 февраля 2010 г. 18:46, спустя 6 минут 41 секунду
2 базы используется одновременно. Их можно конечно по очереди, но пожалуй это не удобно будет.
проверка в методе query() - следствие дебага). Удалю. -
10 февраля 2010 г. 19:03, спустя 17 минут 8 секунд
ну и самое главное,
у тебя по всему проекту должна быть только одна сущность твоего обьекта DB.
ну или столько, сколько баз одновременно используется в проекте
NRG, я не очень понял то, что ты этим хотел сказать. Это какой то недостаток? Проверка нужна? -
10 февраля 2010 г. 19:05, спустя 1 минуту 41 секунду
SpartakuS, страшная у тебя аватарка, есть фото получше?https://smappi.org/ - платформа по созданию API на все случаи жизни -
10 февраля 2010 г. 19:10, спустя 5 минут 32 секунды
adw0rd, да она реально страшная. Я с разбитым еблом, пьяный в хлам и не помнящий всего действия происходящего там.
Ну а вообще я на фото плохо получаюсь и норм фотки у меня только по синей теме. =) Ну посмотрю. Может что еще поставлю) -
10 февраля 2010 г. 19:12, спустя 1 минуту 14 секунд
Спасибо :)https://smappi.org/ - платформа по созданию API на все случаи жизни -
10 февраля 2010 г. 19: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 г. 19:22, спустя 7 минут 12 секунд
и еще одно , твой класс DB не должен вообще ничего знать о существовании каких либо цмс или чтотам у тебя в методе config() ….
ты всеголишь должен сделать чтото типа NRG::getModel('core/config')->getDatabaseSettings();
а вот твоя модель конфига уже сама разбирается какие парметры для соединения отдавать -
10 февраля 2010 г. 19:31, спустя 8 минут 44 секунды
NRG, на счет последнего действительно упустил момент.
И вот вопрос. Как лучше?
В конструкте вызвать метод коннект или прямо там сделать код подключения? Или все равно? -
10 февраля 2010 г. 19:46, спустя 15 минут 34 секунды
коннект к базе делай в конструкторе
если вынесешь сам коннект в отдельный метод а его вызовешь в конструкторе то ниче страшного
Страницы: ← Предыдущая страница • Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!