Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> obiekt klasy X powinien wywolac metode z klasy Y bez dziedziczenia
wiewiorek
post
Post #1





Grupa: Zarejestrowani
Postów: 247
Pomógł: 11
Dołączył: 5.09.2009

Ostrzeżenie: (0%)
-----


Jeśli mam klasę o nazwie Polaczenie z prywatnym konstruktorem do połączenia z bazą danych, a chciałbym używać PDO (PDO umożliwia komunikację z wieloma bazami danych) to przez to, że mam prywatny konstruktor to nie mogę dziedziczyć po klasie PDO, bo inaczej dostaję błąd:
Access level to Polaczenie::__construct() must be public (as in class PDO)

A ja chcialbym moc wysylac zapytania do bazy danych przy uzyciu funkcji prepare() pochodzacej z klasy PDO w ten sposob:
  1. $polaczenie = Polaczenie::getInstance();
  2. $zapytanie = $polaczenie->prepare("INSERT INTO ksiazki(tytul, cena) VALUES(:tytul, :cena)");
  3. $zapytanie->bindValue(':tytul', $_POST['tytul'], PDO::PARAM_STR);
  4. $zapytanie->bindValue(':cena', $_POST['cena'], PDO::PARAM_STR);
  5. $zapytanie->execute();


Ale dostaje blad:
Call to undefined method Polaczenie::prepare()

Bo ta metoda jest w klasie PDO. Co mam zrobic ? Moglbym caly powyzszy kod wstawic do specjalnie utworzonej w tym celu metody w klasie Polaczenie i wtedy byloby ok, ale co ja mam tworzyc dla kazdego inserta oddzielna metode w klasie Polaczenie ? To jak mialbym inserty wykonywane na tabelach np. ksiazki, autorzy itd. ladowac je wszystkie do klasy Polaczenie ? Bez sensu. Co powinienem zrobic ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
wiewiorek
post
Post #2





Grupa: Zarejestrowani
Postów: 247
Pomógł: 11
Dołączył: 5.09.2009

Ostrzeżenie: (0%)
-----


Erix a mógłbyś rozwinąć myśl, bo nie bardzo rozumiem. "rejestr z połączeniem" - to w ogóle pierwszo słyszę, nie jestem w tym zaawansowany.

Void nie rozumiem - bo przecież nie mogę dziedziczyć po PDO - czy też może to rozwinięcie mysli Erixa, Erix zaproponował jakiś sposób, że będę mógł dziedziczyć po PDO (a którego ja nie zrozumiałem), a Ty kontynuujesz Jego mysl ?
Go to the top of the page
+Quote Post
Void
post
Post #3





Grupa: Zarejestrowani
Postów: 112
Pomógł: 15
Dołączył: 2.02.2007

Ostrzeżenie: (0%)
-----


Cytat(wiewiorek @ 7.09.2009, 20:23:51 ) *
Void nie rozumiem - bo przecież nie mogę dziedziczyć po PDO - czy też może to rozwinięcie mysli Erixa, Erix zaproponował jakiś sposób, że będę mógł dziedziczyć po PDO (a którego ja nie zrozumiałem), a Ty kontynuujesz Jego mysl ?

Nie, ja przedstawiłem inną myśl (IMG:style_emoticons/default/smile.gif) Tylko masz rację, zapomniałem o tym prywatnym konstruktorze (IMG:style_emoticons/default/tongue.gif) Co nie zmienia faktu, że możesz wykorzystać to, co napisałem, tylko zamiast dziedziczyć po PDO musisz wykorzystać kompozycję (czyli umieszczenie instancji klasy PDO w polu twojej klasy - to co zrobiłeś w swoim drugim poście). Wtedy byłoby tak:
  1. class Polaczenie
  2. {
  3. // Instancja klasy pdo
  4. private $_pdo;
  5. //...
  6.  
  7. public function prepare($query)
  8. {
  9. return $this->_pdo->prepare($query);
  10. }
  11.  
  12. public function query($query
  13. {
  14. return $this->_pdo->query($query);
  15. }
  16.  
  17. // itd.
  18. }

Albo wywal tego singletona, wtedy można zastosować dziedziczenie (IMG:style_emoticons/default/smile.gif) Poza tym, tak jak pisał erix, czasem może się przydać obsługa kilku różnych baz danych.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 22:36