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;
    }
}
Súbory načítavam len jednoduchým štýlom:
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
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
final:
nechápem ale prečo by to mal byť antipattern
phpfashion.com/je-singleton-zlo
phpfashion.com/singleton-sofie-s
Joker
Profil
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
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
Vďaka všetkým.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: