Portál AbcLinuxu, 10. května 2025 11:16
Řešení dotazu:
new \PDO(...);
use
.
### index.php ### define('PATH', dirname(dirname(__FILE__)).'/code'); function __autoload($class){ $files = PATH.'/'.strtr($class, '_\\', '//').'.php'; require_once(strtr($class, '_\\', '//').'.php'); }
new MySQL(); ### library/MySQL.php ### namespace library; class MySQL{ public function __construct($registry){ $registry->pdo = new /PDO(DB_TYPE.':host='.HOST.';dbname='.NAME.', USER, PASS); }
new \PDO
, nikoliv new /PDO
.$files
. Ta by navíc měla být jednotného čísla.$registry
bys měl dělat tam, kde voláš new
nebo případnou factory metodu. Takle zabíjíš výhody dependency injection. Tedy vytvoř kontejner, který dostane konfiguraci a podle ní vytvoří na požádání třídy. Je to celkem jednoduchá úloha na použití magické metody __get()
a veřejných vlastností objektu (Hint: V konstruktoru si ulož konfiguraci, __get($něco)
koukne do konfigurace, zavolá uvedenou factory metodu a nastaví $this->něco
).MySQL
musíš vytvářet se správným namespace. Tedy: new \library\MySQL()
, nebo přidat vhodný use
.PATH
použij vhodnější název, je trochu matoucí.Dobry den. A jak se v takovem pripade pouziva "use" pro "\" ?new \PDO(...);
use \vyhodi error. Dekuji
use \PDO;Používají se třídy, nikoliv namespace. PHP nemá mechanismus, jak vypsat všechny třídy v daném namespace, neboť jsou načítány až na požádání. Můžeš získat jen třídy už načtené.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.