Kozystajac dotychczas z singletona ktory jest ponoc niefajny i chcac sie przerzucic na DI napotkalem sie z problemem jaki robi mi klasa z moim PDO.
Otoz wczenisej mialem taka klase :
<?php class Database extends PDO { 'db_host' => 'localhost', 'db_user' => 'root', 'db_pass' => 'admin', 'db_name' => 'moje'); self::$instance = new Database('mysql:host='.$database['db_host'].';dbname='.$database['db_name'], $database['db_user'],$database['db_pass']); self::$instance->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING ); } return self::$instance; } } ?>
i wzystko dzialalo cacy, teraz chce ja zmienic wywalic metody statyczne itp i robie tak :
class DB { private $dsn; private $dbname; private $passwd; private $options; public function __construct($dsn, $dbname, $passwd, $options) { $this->dsn = $dsn; $this->dbname = $dbname; $this->passwd = $passwd; $this->options = $options; try { $db = new PDO('mysql: host='.$this->dsn.'; dbname='.$this->dbname.'', $this->passwd,$this->options); return $db; } catch(PDOException $e) { throw new Exception($e->getMessage()); } } }
i dupa , wywala blad Fatal error: Call to undefined method DB::query()
nie chce pisac funckji do query, execute czy prepare nie kumam dlaczego teraz sa juz nierozpoznawalne :/
probowalem jeszcze tak :
class DB extends PDO { ... }
ale wtedy mi cos gada ze "Warning: PDO::query() [pdo.query]: SQLSTATE[00000]: No error: PDO constructor was not called"
a przeciez jest czy o co be :/ natomiast jak nie napisze funkcji construct , tylko zrobie inna connect to mowi ze nie dostal swoich argumentow, oczekuje 1 a ma 0.
Bez kitu nie kumam, jak to zrobic ? I czy wytlumaczy to ktos jakos tak powoli i klarownie ?