Premenovanie statickej triedy „dibi“ na „db“

před 5 měsíci

Manny
Člen | 12
+
-1
-

Zdravím,

mám v úmysle použiť dibi v jednom projekte. Cez composer som si nainštaloval najnovšie dibi. Je možné nejak premenovať statickú classu dibi na db? Pokúšal som sa o to cez refactoring v PhpStorme, ale nešlo mi to.

před 5 měsíci

chemix
Bronze Partner | 940
+
0
-

Co by tě k tomu vedlo? Asi si muzes udelat vlastni tridu DB a ta pak bude volat Dibi, ale to stejne nechces a chces pracovat s instanci a tu si klidne dej do $db. Projekt stavis na cistem PHP nebo tam mas nejaky framework?

před 5 měsíci

Manny
Člen | 12
+
0
-

Je to čisté PHP, jednoduchá aplikácia, ktorá nikdy nenadobudne robustné rozmery.
Ako by sa dala vytvoriť vlastná trieda, ktorá by volala Dibi? To by som musel všetky metódy znova vytvoriť a volať ich, správne?
Primárne sa mi jedná, aby bolo “db” staticky volateľné.

před 5 měsíci

MajklNajt
Člen | 156
+
0
-

môžeš si vytvoriť vlastnú triedu s názvom db ktorá bude dediť od dibi, ale je to hrozné prasenie – prečo ti vadí používať názov dibi? alebo aké výhody od toho očakávaš? je to proti logike, proti výkonu, proti prehľadnosti…

před 5 měsíci

Manny
Člen | 12
+
0
-

Šlo mi len o kratší názov a možnosť statického volania. Na rok starej verzii dibi mi to šlo premenovať a aj to pekne fungovalo. Je pravda, že som to ale teraz inštaloval cez composer, možno v tom je problém. Ak to ale nejde, tak nevadí.

Btw keď sa pokúšam v PhpStorme o výpis metód statickej triedy dibi, tak mi zobrazuje len pár metód:
http://prntscr.com/l8l1gq

Ale keď znova stlačím Ctrl + Space, tak sa už ukážu:
https://prnt.sc/l8kztb

Neviete niekto ako toto vyriešiť tak, že by sa tie metódy zobrazili hneď?

před 5 měsíci

MajklNajt
Člen | 156
+
0
-

je to zrejme preto, že dibi:: je len statická obálka, ktorá má v sebe pár metód (tieto sa ti zobrazia hneď) a ostatné metódy sú iba anotované cez @method a volajú sa pomocou __callStatic(string $name, array $args), preto sa ti primárne neukážu…

před 5 měsíci

MajklNajt
Člen | 156
+
+3
-

…keby si pracoval tým nestatickým spôsobom, fungovalo by ti aj našeptávania pekne

$db = new Dibi\Connection([
    'driver'   => 'mysqli',
    'host'     => 'localhost',
    'username' => 'root',
    'password' => '***',
    'database' => 'db',
]);

$result = $db->query('SELECT * FROM table');

a navyše by si v tom kóde mal namiesto dibi:: iba $db-> čo sa kozmeticky podobá tomu, čo si chcel na začiatku… :)

před 5 měsíci

Šaman
Člen | 2283
+
+2
-

A navíc bys měl plnou kontrolu, co to vlastně ta $db je. Pokud bys třeba někdy musel použít druhé připojení k jiné databázi, tak můžeš mít $db->query(…) a $dbFooBar->query(…).

před 5 měsíci

Manny
Člen | 12
+
0
-

Vďaka za odpovede, len pre info, ak by som potreboval prístup k dvom databázam – je nejaká nevýhoda použiť staticky „dibi“ a potom si vytvoriť objekt?

Pokiaľ sa nemýlim, tak Tracy by s tým malo vedieť pracovať cez kód:

<?php
    // staticke dibi
    $panel = new Dibi\Bridges\Tracy\Panel;
    $panel->register(dibi::getConnection());

    // realny objekt $db
    $panel = new Dibi\Bridges\Tracy\Panel;
    $panel->register($db);
?>

před 5 měsíci

CZechBoY
Člen | 3312
+
0
-

dibi::getConnection() ti vrátí asi jen jedno připojení k db, ne?

před 5 měsíci

Manny
Člen | 12
+
0
-

Áno, predpokladám, že to statické.

před 5 měsíci

MajklNajt
Člen | 156
+
0
-

dôležité ale je si uvedomiť, že inštancia Dibi\Connection sa ti vytvára aj pri statickom používaní, takže “staticky” vôbec nešetríš ani systémové zdroje ani nič… dokonca si môžeš staticky vytvoriť aj viac spojení pomocou dibi::connect([...], $name), ktoré si vieš vytiahnuť cez dibi::getConnection($name)