Autor | Zpráva | ||
---|---|---|---|
Acccd Profil * |
#1 · Zasláno: 14. 6. 2008, 19:12:10
Zdravím,
mám 2 triedy - jedna je "ClassUser", ktorá získavá základné údaje z mysql o aktuálne prihlásenom používateľovi ako napríklad login, email, stav apod. Dnes som sa rozhodol vytvoriť si ďalšiu triedu pre jednoduchšiu správu mysql - nazval som ju "MysqlClass". Iniciujem ich cez: $db = new MysqlClass(); $user = new ClassUser(); Problém je však keď chcem používať v triede ClassUser príkazy a premenné na správu databázy. Trieda MysqlClass vyzerá v skratke asi takto: class MysqlClass { private $host = ""; private $pass = ""; // ... public $num = 0; public $error = ""; public $errno = 0; //... function __construct() { //connect } function query($query) { // mysql_query } function fetch_array($res) { // mysql_fetch_array } } A ako by som mohol využiť v triede ClassUser napríklad $db->query() alebo $db->num? Jediné čo ma napadá, je že by som sa v triede ClassUser znovu napojil do databázy, ale to by nebolo veľmi rozumné riešenie, aby sa pri načítaní súboru 2x pripojovalo do jednej databázy. Vďaka. |
||
joe Profil |
#2 · Zasláno: 14. 6. 2008, 19:18:03
Zápis
$db->query() by snad měl fungovat nebo ne? Co zkusit nastavit $db jako globální? global $db; |
||
joe Profil |
#3 · Zasláno: 14. 6. 2008, 19:26:28
Nebo si udělej třídu pro práci s databází jako statickou třídu.
|
||
Acccd Profil * |
#4 · Zasláno: 14. 6. 2008, 19:34:31
config.php:
class classUser {...} class MysqlClass {...} index.php: include(config.php) global $db; $db = new MysqlClass(); $user = new ClassUser(); Ani takto to nefunguje. Vždy keď sa snažím použiť v triede MysqlClass premennú $db hlási to "Fatal error: Call to a member function query() on a non-object in XXX/config.php on line 247". S tou statickou triedou by to šlo ako spraviť? |
||
joe Profil |
#5 · Zasláno: 14. 6. 2008, 19:39:21
Acccd
global $db; bych napsal do metody, kter $db jako objekt využívá. Se statickou metodou by to bylo tak, že by jsi měl všechny metody ve třídě MysqlClass statické (static). Navíc v metodě query by jsi kontroloval jestli je připojen, pokud ne, připojíš se na db. Volání metod by pak bylo MysqlClass::query(); |
||
bukaj Profil |
#6 · Zasláno: 14. 6. 2008, 20:26:24
Acccd
A co prostě a jednoduše (raději než šaškovat s globálními proměnnými, či to celé přepisovat do statické podoby) si uložit instanci MysqlClass jako instanční proměnnou a pracovat s ní? <?php class ClassUser { private $db; // ... další definované proměnné public function setDb(MysqlClass $db) { $this->db = $db; } public function nejakaFce() { // volání na databázi $this->db->query(...); } // ... další definované fce } PS. Mimochodem, nedoporučuji ti do jména každé třídy dávat slovo class. Podle mě to nic nepřinese a akorát to prodlužuje názvy. |
||
srigi Profil |
#7 · Zasláno: 14. 6. 2008, 20:49:05
Tak, tak ako pise Bukaj. Este doplnim vytvaranie objektov
$db = new ClasMysql(); $user = new ClassUser(); $user->setDb($db) |
||
joe Profil |
#8 · Zasláno: 14. 6. 2008, 21:40:37
či to celé přepisovat do statické podoby
Protože až si rozmyslí, že přidá další třídu, bude muset znovu napsat metodu setDb do každé nové třídy a to mi přijde docela zbytečné. |
||
Časová prodleva: 16 let
|
0