[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Экземпляр класс, в другом классе
Tumour
Вообщем есть 2 класса, один для работы с бд и другой класс выполняющие некие действия и допустим в неком методе нужно обратится с базе данных, а то бишь подключится к бд и сделать некий запрос.

То есть:
Это класс для работы с бд

//Класс для работы с бд

Class DataBase{
//тут всякие свойства

function connectDb(){
//Подключаемся к бд
}

function query(){
//Тут всякие запросы к бд
}
}


Class Analitics{
//Тут всякие свойства
function __construct(){
//Здесь нужно подключится к бд
//Сделать запрос к бд типа INSERT INTO

}
}



Наследовать? В классе DataBase 1000 строк, то бишь куча методов, которые мне не нужны в данный момент.

Создать обьект DataBase в классе Analitics? Почему - то мне кажется это не гуманно так сказать. Хотя я не знаю, собственно за этим сюда и пришел.

Что делать товарищи? Собственно только недавно начал учить ООП, по этому, наверное такие проблемы.


_____________
Путешествуй с BookRestEasy.com
SerginhoLD
паттерн Singleton

в твоем Analitics будет что-то вроде
$db = DataBase::getInstance();
$data = $db->query('запрос');


_____________
"internet explorer всех правильней отображает страницы" ©
Arh
Tumour
Передай его в конструктор.

<?php
//Класс для работы с бд

Class DataBase{
//тут всякие свойства

function connectDb(){
//Подключаемся к бд
}

function query(){
//Тут всякие запросы к бд
}
}


Class Analitics{

//Тут всякие свойства
protected $DataBase;

function __construct(DataBase $DataBase){

$this->DataBase = $DataBase;
//Здесь нужно подключится к бд
//Сделать запрос к бд типа INSERT INTO

}

public function test () {
return $this->DataBase->query("...");
}

}


$Analitics = new Analitics($DataBase);


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Tumour
SerginhoLD
Медоты работы с бд которые буду использовать сделать static? Я кстате подумал об этом, но почему - то стеснялся сделать.

_____________
Путешествуй с BookRestEasy.com
Tumour
Arh
Спасибо, тоже интересный вариант.
Пошел обдумывать, что будет проще для меня.

_____________
Путешествуй с BookRestEasy.com
walerus
Tumour
Пользуюсь этим
_class.db.php
<?PHP

class db{


private $con = false; // Идентификатор
private $Queryes = 0; // Число запросов
private $MySQLErrors = array(); // Массив с ошибками
private $TimeQuery = 0; // Всемя запросов
private $MaxExTime = 0; // Максимальное время за 1 запрос
private $ListQueryes = ""; // Список запросов
private $HardQuery = ""; // Самый тяжелый запрос
private $LastQuery = false; // Ресурс запрос
private $ConnectData = array(); // Данные соединения

/*======================================================================*\
Function: __construct
Descriiption: Выполняется при создании экземпляра класса
\*======================================================================*/

public function __construct($host, $user, $pass, $base){
$this->Connect($host, $user, $pass, $base);
// $this->query("SET NAMES 'cp1251'");
// $this->query("SET CHARACTER SET 'cp1251'");

$this->query("SET NAMES 'UTF8'");
$this->query("SET CHARACTER SET 'UTF8'");
}

/*======================================================================*\
Function: Stats
Descriiption: Возвращает статистику по запросам
\*======================================================================*/

public function Stats(){

$sD = array();
$sD["TimeQuery"] = $this->TimeQuery;
$sD["MaxExTime"] = $this->MaxExTime;
$sD["ListQueryes"] = $this->ListQueryes;
$sD["HardQuery"] = $this->HardQuery;
$sD["Queryes"] = $this->Queryes;
return $sD;
}

/*======================================================================*\
Function: GetError
Descriiption: Выводит описание ошибки в поток
\*======================================================================*/

private function GetError($TextError){
$this->MySQLErrors[] = $TextError;
die($TextError);
}


/*======================================================================*\
Function: query
Descriiption: Запрос
\*======================================================================*/

public function query($query, $FreeMemory = false, $write_last = true){

$TimeA = $this->get_time();
$xxt_res = mysqli_query($this->con, $query) or $this->GetError(mysqli_error($this->con));

if($write_last) $this->LastQuery = $xxt_res;

$TimeB = $this->get_time() - $TimeA;
$this->TimeQuery += $TimeB;

if($TimeB > $this->MaxExTime){$this->HardQuery = $query; $this->MaxExTime = $TimeB;}

if( empty($this->ListQueryes) ) $this->ListQueryes = $query; else $this->ListQueryes .= "\n".$query;

$this->Queryes++;

if(!$FreeMemory){
return $this->LastQuery;
}else return $this->FreeMemory();


}

/*======================================================================*\
Function: Connect
Descriiption: Соединяется с ДБ
\*======================================================================*/

private function Connect($host, $user, $pass, $base){
$this->con = @mysqli_connect($host, $user, $pass, $base) or $this->GetError(mysqli_connect_error());
}


/*======================================================================*\
Function: MultiQuery
Descriiption: Множественный запрос
\*======================================================================*/

function MultiQuery($query){

$TimeA = $this->get_time();

mysqli_multi_query($this->con, $query) or $this->GetError(mysqli_connect_error());
$TimeB = $this->get_time() - $TimeA;
$ret_data = array();
$counter = 0;
do{

if ($result = mysqli_store_result($this->con)) {

while ($row = mysqli_fetch_array($result)) {
$ret_data[$counter][] = $row;
}
mysqli_free_result($result);
$counter++;
}


}
while(mysqli_next_result($this->con));



$this->TimeQuery += $TimeB;

if($TimeB > $this->MaxExTime){$this->HardQuery = $query; $this->MaxExTime = $TimeB;}

if( empty($this->ListQueryes) ) $this->ListQueryes = $query; else $this->ListQueryes .= "\n".$query;

$this->Queryes++;

return $ret_data;
}

/*======================================================================*\
Function: get_time
Descriiption: Возвращает строку времени
\*======================================================================*/

private function get_time()
{
list($seconds, $microSeconds) = explode(' ', microtime());
return ((float) $seconds + (float) $microSeconds);
}

/*======================================================================*\
Function: __destruct
Descriiption: Выполняется при уничтожении экземпляра класса
\*======================================================================*/

function __destruct(){

if( !count($this->MySQLErrors) ) mysqli_close($this->con);

}

/*======================================================================*\
Function: FreeMemory
Descriiption: Освобождает память
\*======================================================================*/

function FreeMemory()
{
$tr = ($this->LastQuery) ? true : false;
@mysqli_free_result($this->LastQuery);
return $tr;
}

/*======================================================================*\
Function: RealEscape
Descriiption: Фильтрация )
\*======================================================================*/

function RealEscape($string)
{
if ($this->con) return mysqli_real_escape_string ($this->con, $string);
else return mysql_escape_string($string);
}

/*======================================================================*\
Function: NumRows
Descriiption: Подсчет числа строк
\*======================================================================*/

function NumRows()
{
return mysqli_num_rows($this->LastQuery);
}

/*======================================================================*\
Function: fetch_array
Descriiption: Возвращ массив, создает циферные ключи...
\*======================================================================*/

function FetchArray(){
//if($this->LastQuery)
return mysqli_fetch_array($this->LastQuery);
}

/*======================================================================*\
Function: fetch_assoc
Descriiption: Возвращ ассоциативный массив...
\*======================================================================*/

function FetchAssoc(){
//if($this->LastQuery)
return mysqli_fetch_assoc($this->LastQuery);
}

/*======================================================================*\
Function: NumRows
Descriiption: Возвращает результат
\*======================================================================*/

function FetchRow(){
$xres = mysqli_fetch_row($this->LastQuery);

return (count($xres) > 1) ? $xres : $xres[0];
}

/*======================================================================*\
Function: LastInsert()
Descriiption: Возвращает последний ID вставки
\*======================================================================*/

function LastInsert(){

return @mysqli_insert_id($this->con);

}

}

?>

# База данных подключение
$db = new db( $config->HostDB, $config->UserDB, $config->PassDB, $config->BaseDB );

# Использование класса
$db->Query( "SELECT `user`, `skype`, `date_reg`, `date_login` FROM `db_users` WHERE `id` = '" . $user_id . "'" );
$tmp_data = $db->FetchAssoc();

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.