Autor | Zpráva | ||
---|---|---|---|
final Profil |
Zdravím,
snažím sa spraviť si nejaké jednoduché oop veci. Trieda connection by mala niesť dibi inštanciu. <?php namespace Models; class Connection { protected static $connection; public static function getInstance() { if (!self::$connection) { self::$connection = new DibiConnection([ 'driver' => 'mysql', 'host' => DB_HOST, 'username' => DB_USERNAME, 'password' => DB_PASSWORD, 'database' => DB_NAME, ]); } return self::$connection; } } require_once 'dibi.min.php'; require_once './Models/Connection.php'; Akonáhle sa snažím vytvoriť inštanciu $connection = new \Models\Connection(); var_dump($connection::getInstance()); mi to hádže chybu: Fatal error: Class 'Models\DibiConnection' not found in C:\xxx\Models\Connection.php Moc tomu nerozumiem, čo robím zle? Edit: prvá chyba je asi v tom, že tam je použitý namespace. Keď to ale vyhodím, tak síce už nevypisuje žiadnu chybu, ale ako keby sa to nepripojí, resp. nefungujú žiadne query. |
||
Alphard Profil |
1. dibi implementuje statický registr samo o sobě :-) Koukni na dibiphp.com, připojíš se pomocí
dibi::connect a pak můžeš volat dibi::query . Ten svůj wrapper vůbec nepotřebuješ.
2. Singleton je občas považovaný za antipattern, ale k tomu asi dojdeš později. 3. Řešením by mělo být tohle new \DibiConnection .
|
||
final Profil |
#3 · Zasláno: 28. 9. 2015, 09:50:24
1. O tom viem, vychádzal som ale z prvého bodu tu: Diskuse JPW: OOP v praxi: Kde použiť triedu?
2. Už som zistil, nechápem ale prečo by to mal byť antipattern :-) 3. Skúšal som aj to, ale nefungovalo mi to, a hlavne nevypisovalo žiadnu chybu.. Nakoniec som ale zistil, že som zabudol zmeniť prihlasovacie údaje do db. |
||
Jan Tvrdík Profil |
#4 · Zasláno: 28. 9. 2015, 09:58:01
final:
„nechápem ale prečo by to mal byť antipattern“ phpfashion.com/je-singleton-zlo phpfashion.com/singleton-sofie-s |
||
Joker Profil |
#5 · Zasláno: 28. 9. 2015, 10:03:18
final:
„2. Už som zistil, nechápem ale prečo by to mal byť antipattern :-)“ Z toho co jsem četl byly hlavní výtky, že to je jakási nová forma globálních proměnných a že se v praxi často používá zbytečně (v situacích, kde není potřeba). |
||
Alphard Profil |
#6 · Zasláno: 28. 9. 2015, 10:27:56
final:
„1. O tom viem, vychádzal som ale z prvého bodu tu: Diskuse JPW: OOP v praxi: Kde použiť triedu?“ Myslíš tu větu „Používejte ho ale instančně, ne staticky (jak je snad ve všech příkladech :-)), protože tím se nic nenaučíte.“? Ta byla napsaná v trochu jiné situaci, Tomáš123 se chtěl učit objektový návrh, tak jsem doporučoval používat dibi instančně, aby se naučil něco nového (tj. opravdu používat instančně). Pokud tuto službu někdo chce používat staticky, je logické, že použije statický registr implementovaný v dibi. Používat dibi instančně v rámci vlastního statického wrapperu nemá smysl. |
||
final Profil |
#7 · Zasláno: 28. 9. 2015, 10:33:54
Vďaka všetkým.
|
||
Časová prodleva: 7 let
|
0