Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Obiektowosc
Forum PHP.pl > Forum > PHP
sammy103
Witam,

moze powrot do podstaw, ale


  1. $db = new PDO('mysql:host=localhost;dbname=andypsv_cocain','root','',array(PDO::ATTR_PERSISTENT=>true)); $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC); define('PRFX','drug_');
  2.  
  3. class PAGE {
  4. var $_t,$_k,$_d,$_c,$_nav,$_,$tpl,$u,$md;
  5.  
  6. function PAGE($md='',$md2='',$md3='',$md4='') {
  7. $q = $db->query('SELECT * FROM `'.PRFX.'c0'.LG.'`'); if($q->rowCount() == 0) die(_E.'no categories'); while($_c0 = $q->fetch()) $c0[] = $_c0; $this->tpl->assign('c0',$c0);
  8. ...
  9.  
  10. PRZY CZYM... INNE KLASY.
  11.  
  12. class HELP extends PAGE {
  13. function i() {
  14. // CHCE TUTAJ UZYWAC $db->query



W jaki sposob rozwiazac ten problem bym mogl korzystac z klasy $db wewnatrz innych klas?

Dotychczas uzywalem samych funkcji wiec dzialalo wszedzie bez przeszkod.

Jak?
semafor1985
albo tworzysz obiekt w klasie,
albo wstrzykujesz obiekt utworzony poza klasą do klasy np. poprzez konstruktor
albo tworzysz statyczne metody w klasie (np. do łączenia z bazą) i w swojej klasie odwołujesz się do tej statycznej metody
sammy103
Czyli jak to zrobic? Jak zaimportowac $db spoza klasy by mogl byc uzywany?

Nie wiem, to pytam.
semafor1985
tu masz np. wstrzykiwanie zależności:

http://lukasz-socha.pl/php/wzorce-projekto...ency-injection/

co do klas do połączeń z bazą danych szukaj np. pod: "singleton do obsługi BD"
z utworzeniem obiektu w klasie już chyba sobie poradzisz
sammy103
chodzi o to, ze chce sie polaczyc z baza tylko raz a NIE zeby ciagle byl wykonywany ten sam kod w zasadzie;

tak, by zmienna $db->query() byla dostepna zawsze i wszedzie, w tych klasach: jak na zalaczonym kodzie

wczesniej uzywalem funkcji q() -> czyli skrotu od mysql_query i bylo dobrze a jak uzyskac to samo?

---
czy moglby ktos by to pokazac na tym kodzie w 1 poscie na gorze?

Dopisalem

  1. function PAGE($md='',$md2='',$md3='',$md4='') {
  2. global $db;



i dziala...
darko
  1. $db = ...... // tu masz swój obiekt bazy danych
  2.  
  3. class HELP extends PAGE {
  4. protected $_db = null;
  5. public function setDatabase(PDO $db) {
  6. $this->_db = $db;
  7. return $this;
  8. }
  9.  
  10. $page = new Help();
  11. $page->setDatabase($db);
daniel1302
Albo poprostu zastosuj wzorzec projektowy który nazywa się Singleton, jest to proste rozwiązanie a zarazaem wygodne. Niektórzy kłócą się, że wprowadza wiele zamętu jednak jest on tak popularny, że wyłapać go nawet w bardzo złożonej aplikacji może dziecko.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.