Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Классы и методы, Доступ к методу класса "а" в классе "б"
NitroGenerate  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 236
Пользователь №: 27946
На форуме: 5 лет, 6 месяцев, 20 дней
Карма: 11




Доброго времени суток.
Прошу помощи знатаков, никак не могу разобраться к классах и методах.

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


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

Как быть в моем случае?
Как лучше реализовать ?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
TranceIT  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



...Один я одинаковый...
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1733
Пользователь №: 19760
На форуме: 7 лет, 22 дня
Карма: 58




По логике в 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
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
NitroGenerate  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 236
Пользователь №: 27946
На форуме: 5 лет, 6 месяцев, 20 дней
Карма: 11




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

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

Итог: 20 классов, 20 раз я открою и закрою соединение, по мне, так это не рационально.
Второй день ломаю голову и читаю про классы. Ничего дельного так и нет в моей голове...
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2110
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 7 дней
Карма: 70




а global это плохо?


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

class listNews{

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


}
}


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
SlavaFr  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
******

Профиль
Журнал
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1535
Пользователь №: 22453
На форуме: 6 лет, 6 месяцев, 7 дней
Карма: 104




имеется возможности
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();
PMПисьмо на e-mail пользователю
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
SlavaFr  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
******

Профиль
Журнал
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1535
Пользователь №: 22453
На форуме: 6 лет, 6 месяцев, 7 дней
Карма: 104




Цитата (Arh @ 10.09.2013 - 08:15)
global $db,$users,$tpl;

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


--------------------
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 25993
Пользователь №: 21350
На форуме: 6 лет, 8 месяцев, 25 дней
Карма: 725

Не курю:
1 год, 2 месяца, 11 дней


NitroGenerate
PDO - уже с ООП синтаксисом
mysqli - имеет ООП синтаксис

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


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
NitroGenerate  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 236
Пользователь №: 27946
На форуме: 5 лет, 6 месяцев, 20 дней
Карма: 11




Переписываю движок, написанный на php еще в 2005 году, который дырявый, кривой, без единого класса, последняя версия которого была выпущена в 2006 году, теперь он не поддерживается.

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

Не париться не могу, ибо все возникающие проблемы, нужно решать а не обходить их. Больше скилл будет =)))
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 25993
Пользователь №: 21350
На форуме: 6 лет, 8 месяцев, 25 дней
Карма: 725

Не курю:
1 год, 2 месяца, 11 дней


скилл набивается неплохо в WOT


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered










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

}



где-то так. в новом классе будет подключение автоматически
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса