Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pdo dołączanie klasy ?
Forum PHP.pl > Forum > Przedszkole
tabbi
Witam,

chciałbym dołączyć sam wskaźnik do bazy PDO na jakiej zasadzie mam dołączać tą klase w innych klasach żeby móc operować na zapytaniach do bazy mysql?

np . za pomoca instancji czy jak ?
yevaud
musisz w jakis sposob przekazac smile.gif

a w konstruktorze
b w metodzie inicjalizujacej polaczenie obiektu z baza
c singletonem
Crozin
W PHP nie masz wskaźników - są jedynie referencje.

Jedyny sensowny sposób to przekazanie tej referencje w konstruktorze obiektu:
  1. $pdo = new PDO(...);
  2. $obj = new MyObject($pdo);


Cytat
b w metodzie inicjalizujacej polaczenie obiektu z baza
c singletonem
Ad. b: W jaki niby sposób utworzenie nowego obiektu ma przekazać istniejący?
Ad. c: Weź nawet z takimi debilnymi pomysłami nie wyskakuj. winksmiley.jpg
tabbi
a jak to potem wyglada w konstruktorze klasy w ktorej zostaje przekazana referencja obiektu ?

  1. Class Pliki{
  2.  
  3. private $dbh = null;
  4.  
  5. function __construct(&$dbh){
  6.  
  7. this->dbh=$dbh; ? TAK questionmark.gif
  8.  
  9. }
  10. }


i CO Zrobić jeśli np. w klasie ktora jest instancja takze chciałbym wykonywać polecenia z mysql wtedy odpowienio musze przekazać Referencje do getInstance ?
Mephistofeles
W PHP obiekty są domyślnie przekazywane przez referencję, możesz pominąć &.
Noidea
Od PHP 5 wszystkie obiekty przekazywane są przez referencję, więc nie potrzebujesz &. No i zgubiłeś jednego dolara.
  1. Class Pliki {
  2.  
  3. private $dbh = null;
  4.  
  5. function __construct( $dbh ) {
  6.  
  7. $this->dbh=$dbh; // TAK.
  8.  
  9. }
  10. }



Cytat
CO Zrobić jeśli np. w klasie ktora jest instancja takze chciałbym wykonywać polecenia z mysql wtedy odpowienio musze przekazać Referencje do getInstance

Najpierw musiałbyś zapoznać się z nazewnictwem w programowaniu obiektowym, a dopiero później zadawać takie pytania, bo na razie nie mają one zbyt dużego sensu (np. "klasa która jest instancją")
yevaud
Cytat(Crozin @ 30.01.2011, 10:51:29 ) *
Jedyny sensowny sposób to przekazanie tej referencje w konstruktorze obiektu:
  1. $pdo = new PDO(...);
  2. $obj = new MyObject($pdo);

Ad. b: W jaki niby sposób utworzenie nowego obiektu ma przekazać istniejący?

z obiektami jest roznie. Czasami obiekt potrzebuje polaczenia z baza od razu, a czasem jest to niepotrzebne, a wrecz nieporzadane. Wtedy uzywasz konstrukcji w tym stylu
$this->connectWithDb($db);
i o to mi chodzilo. Jasne ze wszyscy juz mamy nastukane do glowy jak ma wygladac ORM, ale to naprawde nie musi tak wygladac smile.gif inne rozwiazanie moze byc rownie dobre, a zachowywac sie zupelnie inaczej.
Wezmy tez pod uwage ze obiekt moze chciec cos zrobic w bazie juz na wejsciu, wtedy przekazywanie bazy w konstruktorze ma duzo mniej sensu, bo rzucanie wyjatku z konstruktora to sredni pomysl.

Cytat
Ad. c: Weź nawet z takimi debilnymi pomysłami nie wyskakuj. winksmiley.jpg

e tam whatever winksmiley.jpg wszedzie Ci ortodoksi ostatnio
tabbi
Witam,

zrobiłem tak jak wyżej i niestety wypisuje mi błąd Cannot redeclare class Mysql

Klasa mysql wyglada takL:

  1. Class Mysql{
  2.  
  3. public $dbh = null;
  4.  
  5. function __construct(){
  6.  
  7. try{
  8.  
  9. $this->dbh=new PDO(....)
  10. $this->dbh-> setAttribute(...)
  11. }
  12.  
  13. catch{
  14.  
  15. }
  16.  
  17. }
  18. }
Spawnm
Przenoszę do przedszkola.
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.