Erix wielkie dzieki za propozycje, niestety po zastosowaniu Twego sposobu do swojej klasy (i oczywiscie zmodyfikowaniu Twego kodu pod swoje potrzeby) dostaje blad (

):
Call to a member function pobieranieDanych() on a non-object
u Ciebie to bylaby ta linia:
$q = parent::$connection->query('asdasd');
Jesli chodzi o singleton to wiem, ze zawsze jest jedno polaczenie, chodzilo mi o sytuacje gdybym nie zastosowal wzorca Singleton do klasy Polaczenie,
a inne klasy dziedziczylyby po klasie Polaczenie - przyklad:
class Polaczenie extends PDO{
private $pdo;
private $dsn = 'mysql:host=localhost;dbname=koszyk';
private $uzytkownik = 'root';
private $haslo = '';
public function __construct() {
try {
$this->pdo = new PDO
($this->dsn, $this->uzytkownik, $this->haslo, array(PDO
::MYSQL_ATTR_INIT_COMMAND=>"SET NAMES utf8")); $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e) {
echo '<p>Polaczenie nie moglo zostac utworzone: '.$e->getMessage().'</p>'; }
}
public function __destruct() {
}
public function zapytanie($z) {
try{
$wynik = $this->pdo->query($z);
$wynik_tablica = $wynik->fetchAll();
$wynik -> closeCursor();
return $wynik_tablica;
}
catch(PDOException $e) {
echo '<p>blad w metodzie pobieranieDanych(): '.$e->getMessage().'</p>'; }
}
}
------------------------------
class Ksiazki extends Polaczenie
{
private $polaczenie;
public function __construct()
{
$this->polaczenie = new Polaczenie();
}
public function __destruct()
{
}
public function pobierzKsiazki()
{
return $this->polaczenie->zapytanie("SELECT * FROM ksiazki");
}
}
--------------------------------------------------------------
class Autorzy extends Polaczenie
{
private $polaczenie;
public function __construct()
{
$this->polaczenie = new Polaczenie();
}
public function __destruct()
{
}
public function pobierzAutorow()
{
return $this->polaczenie->zapytanie("SELECT * FROM autorzy");
}
}
-------------------------
$ksiazki = new Ksiazki();
$rezultat1 = $ksiazki->pobierzKsiazki();
$autorzy = new Autorzy();
$rezultat2 = $autorzy->pobierzAutorow();
To wtedy utworzenie dwoch obiektow oznaczaloby pewnie dwa polaczenia do bazy danych zamiast jednego jak w przypadku zastosowania wzorca singleton do klasy Polaczenie.
Najlepszym wyjsciem jest chyba tworzenie obiektu klasy Polaczenie i przekazywanie go do konstruktorow pozostalych klas:
class Polaczenie extends PDO{
private $pdo;
private $dsn = 'mysql:host=localhost;dbname=koszyk';
private $uzytkownik = 'root';
private $haslo = '';
public function __construct() {
try {
$this->pdo = new PDO
($this->dsn, $this->uzytkownik, $this->haslo, array(PDO
::MYSQL_ATTR_INIT_COMMAND=>"SET NAMES utf8")); $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e) {
echo '<p>Polaczenie nie moglo zostac utworzone: '.$e->getMessage().'</p>'; }
}
public function __destruct() {
}
public function pobieranieDanych($z) {
try{
$wynik = $this->pdo->query($z);
$wynik_tablica = $wynik->fetchAll();
$wynik -> closeCursor();
return $wynik_tablica;
}
catch(PDOException $e) {
echo '<p>blad w metodzie pobieranieDanych(): '.$e->getMessage().'</p>'; }
}
}
----------------------------------------------
class Ksiazki
{
private $polaczenie;
public function __construct($db)
{
$this->polaczenie = $db;
}
public function __destruct()
{
}
public function pobierzKsiazki()
{
return $this->polaczenie->pobieranieDanych("SELECT * FROM ksiazki");
}
}
-----------------------------------------------------------------
$polaczenie = new klasaPolaczenie();
$ksiazki = new klasaKsiazki($polaczenie);
$rezultat_1 = $ksiazki->pobierzKsiazki();
$ksiazki2 = new klasaKsiazki($polaczenie);
$rezultat_2 = $ksiazki->pobierzKsiazki();