[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Классы и методы
NitroGenerate
Доброго времени суток.
Прошу помощи знатаков, никак не могу разобраться к классах и методах.

Написал класс работы с бд


class dbClass{

public static $db = false;

function __construct()
{
$db = new PDO("...");

$this->db = $db;
}


function myQuery($query)
{
$res = $this->db->query($sql);

return $res;

}
}



И есть множество других классов, которые будут активно использовать бд


class listNews{


function listing()
{

// Как выполнить запрос через функцию класса db Query?

/*
P.S. dbClass::db->query не целесообразно так как нужно запрос пропустить
через внутреннюю функцию (myQuery) для фильтрации и логирования
*/



}
}



Метод myQuery объявить статическим тоже не могу, так как он использует переменную $this

Как быть в моем случае?
Как лучше реализовать ?
TranceIT
По логике в dbClass будет метод для подключения к БД. Это значит, что экземпляр класса будет создаваться перед любым обращением к БД. Т.е. мы можем передать метод в другой класс. Называется это замыканием (если я не ошибаюсь).

Осуществить подобное можно начиная с версии 5.3

Что-то типа.

class first {
function run(){
$this->func;
}
}


class second {
function show(){
echo "it works";
}
}


$first_obj = new first();
$second_obj = new second();
$first_obj->func = $second_obj->show();
$first_obj->run();


В ООП не силен, все вышеописанное строится на догадках и воспоминаниях документации.

_____________
Безвозмездно помогаю только тем, кто сам пытается что-то сделать.

Остальным за WMR
Даже если там 10 строк кода!
Даже если мне это ничего не стоит!
Даже если вы нуб!

user posted image
NitroGenerate
Это что получается, у меня допустим 20 классов
новости,
пользователи,
статистика
форумы
комментарии
чаты
и тд...
и каждый раз я буду передергивать подключение к бд ?

Сейчас у меня подключение к бд создается при создании объекта класса dbClass и разрушается после всех обращений к этому классу.

Итог: 20 классов, 20 раз я открою и закрою соединение, по мне, так это не рационально.
Второй день ломаю голову и читаю про классы. Ничего дельного так и нет в моей голове...
Arh
а global это плохо?


$db = new dbClass ();
$tpl = new tplClass ();
$users = new usersClass ();

class listNews{

function listing() {
global $db,$users,$tpl;


}
}


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
SlavaFr
имеется возможности
1) содить твой DB-объект как параметр в используемые классы
2) фактори, который выдает как singelton твой DB-объект.
3) или как ты уже пытался сделать, но недовоел до конца просто зингелтон

//не тестировал, возможны ошибки!
class dbClass{

protected static $db = false;
protected $pdo = null;

/**
*
@return dbClass
*/

public static function getInstance()
{
if(!self::$db) {
self::$db = new self();
}
return self::$db;
}

private function __construct()
{
$this->pdo = new PDO("...");
}


public function myQuery($query)
{
$res = $this->pdo->query($sql);

return $res;

}
}


теперь пользуйся твоим объектом в других классах вызывая его посредством
$db = dbClass::getInstance();
$db->myQuery(....);

_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
SlavaFr
Цитата (Arh @ 10.09.2013 - 08:15)
global $db,$users,$tpl;

лучше всего забыть, что слово global существует и этому есть причины которые частно обсуждались даже в этом форуме.

_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
Игорь_Vasinsky
NitroGenerate
PDO - уже с ООП синтаксисом
mysqli - имеет ООП синтаксис

не парься с примером коннекта к БД - делай на другом чём нить.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
NitroGenerate
Переписываю движок, написанный на php еще в 2005 году, который дырявый, кривой, без единого класса, последняя версия которого была выпущена в 2006 году, теперь он не поддерживается.

Так что, кроме БД у меня еще будет где разгуляться и на чем поучиться.

Не париться не могу, ибо все возникающие проблемы, нужно решать а не обходить их. Больше скилл будет =)))
Игорь_Vasinsky
скилл набивается неплохо в WOT

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Guest

class ... extends dbClass {
parent::construct () {
}

}



где-то так. в новом классе будет подключение автоматически
Быстрый ответ:

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