Autor | Zpráva | ||
---|---|---|---|
Dušan Profil * |
#1 · Zasláno: 13. 1. 2008, 19:57:45
Dobrý den, chtěl bych se zeptat na jednu več ohledně mého kódu, možná to bude blbost ale nějak jsem si s tím už nevěděl rady.
Mám třídu DatabaseConnector, která pomocí metody spojit() vrací zpět hadler databázového připojení a novou třídu LogIn, která by měla dědit původní třídu DatabaseConnector. Puvodní třída je bez problému, ale když chci v nové třídě nadstavirt databazi php vyhodí chybu: mysql_select_db(): supplied argument is not a valid MySQL-Link resource class LogIn extends DatabaseConnector { private $email; private $tabulka; private $heslo; private $handler; public function __constuct($tab,$mail,$heslo) { $this->email = htmlspecialchars($mail); $this->tabulka = htmlspecialchars($tab); $this->heslo = htmlspecialchars($heslo); $this->handler = parent::spojit(); // az to bude fungovat tak bude parent::spojit(); } public function checkDatabase($database) { if(mysql_select_db($database,$handler) == FALSE) { ErrorMessage::errConnection(sprintf("Nelze nadstavit databazi")); } } } Nechce mi to přiřadit handler... prosím pomozte kdo by měl nápad. Předem děkuji |
||
Vojtěch Zicha Profil * |
#2 · Zasláno: 13. 1. 2008, 20:00:50
Místo $handler tam dej $this->handler
|
||
Dušan Profil * |
#3 · Zasláno: 13. 1. 2008, 20:01:27
jinak ta chyba ze je zde __constuct misto __construct je opravena a nejde to stale
|
||
Mastodont Profil |
#4 · Zasláno: 13. 1. 2008, 20:03:16 · Upravil/a: Mastodont
-- edit: pozdě
|
||
BetaCam Profil |
#5 · Zasláno: 13. 1. 2008, 21:54:02
Takovej OT:
Co má třída LogIn společného s třídou DatabaseConnector, že z ní děláš potomka?? |
||
Dušan Profil * |
#6 · Zasláno: 13. 1. 2008, 22:04:05
potrebuje handler na pripojeni k databazi. a dal na ni bude navazovat. nimene i kdyz jsem odstranil dedicnost a dal:
$this->handler = DatabaseConnector:spojit(); Tak to neslo |
||
BetaCam Profil |
#7 · Zasláno: 13. 1. 2008, 22:15:02 · Upravil/a: BetaCam
$this->handler = DatabaseConnector:spojit();
Tohle je blbost. Pokud je ta metoda statická musíš jí volat $this->handler = DatabaseConnector::spojit(); Pokud je instanční tak bude třída DatabaseConnector s největší pravděpodobností Singleton. Takže si zavoláš Factory metodu a handler si zjistíš z vrácené instance. Tedy něco jako. $DBConnector = DatabaseConnector::getInstance(); $this->handler = $DBConnector->spojit(); Pokud ta třída nemá stou druhou nic společného je podle mě lepší je složit než využívat dědičnosti, ale to je pouze můj názor. |
||
Dušan Profil * |
#8 · Zasláno: 13. 1. 2008, 22:21:02
jestě se zeptám tak trochu hloupě. tak metoda getInstance() je definovana php ? protože mi to píše, že není definována.
|
||
Mastodont Profil |
#9 · Zasláno: 13. 1. 2008, 22:25:56
Ne, není.
|
||
Dušan Profil * |
#10 · Zasláno: 13. 1. 2008, 22:29:09
metoda spojit v třídě DatabaseConnector je instancni, avšak jak nahradit tento řádek
$DBConnector = DatabaseConnector::getInstance(); |
||
BetaCam Profil |
#11 · Zasláno: 13. 1. 2008, 22:31:31
jestě se zeptám tak trochu hloupě. tak metoda getInstance() je definovana php ? protože mi to píše, že není definována.
Neni. Otázka je jak máš definovanou třídu DatabaseConnector. Máš jí definovanou jako Singleton a nebo ji máš definovanou jako třídu s možností více instancí?? |
||
Dušan Profil * |
#12 · Zasláno: 13. 1. 2008, 22:33:34
trida je zde:
class DatabaseConnector { const UZIVATELSKEJMENO = "***"; const HOST = "***"; const HESLO = "****"; public function spojit() { $spojeni = $this->vytvoritDbSpojeni(); $this->ukazDbSpojeni($spojeni); return $dbSpojeni; } protected function vytvoritDbSpojeni() { if(!($link = mysql_pconnect(self::HOST, self::UZIVATELSKEJMENO, self::HESLO))) { ErrorMessage::errConnection(sprintf("Chyba pripojeni k databazi pro uzivatele %s k hostiteli %s",self::UZIVATELSKEJMENO,self::HOST)); exit(); } else { return $link; } } private function ukazDbSpojeni($spojeni) { $this->dbSpojeni = $spojeni; } private $dbSpojeni; } |
||
BetaCam Profil |
#13 · Zasláno: 13. 1. 2008, 22:35:44
Dušan
$DBConnector = DatabaseConnector::getInstance(); Pokud máš třídu DatabaseConnector nadefinovanou jako třídu která může mít více instancí můžes ten řádek nahradit tímto: $DBConnector = new DatabaseConnector(); Otázka ovšem je jestli opravdu zrovna u třídy pro připojení k DB je nutné mít více instancí. |
||
Dušan Profil * |
#14 · Zasláno: 13. 1. 2008, 22:39:53
tohle neresi situaci to vytvoreni v konstruktoru jsem take zkousel a výsledek je stejný.
|
||
Mastodont Profil |
#15 · Zasláno: 13. 1. 2008, 22:41:04 · Upravil/a: Mastodont
public function spojit() { $spojeni = $this->vytvoritDbSpojeni(); $this->ukazDbSpojeni($spojeni); return $dbSpojeni; } } private function ukazDbSpojeni($spojeni) { $this->dbSpojeni = $spojeni; } To jsem nepochopil. Proč ne prostě public function spojit() { return $this->vytvoritDbSpojeni(); } |
||
Dušan Profil * |
#16 · Zasláno: 13. 1. 2008, 22:46:26
Mastodont Tohle ted neresme je to pripavene pro dalsi upgrade. Vazne jsem uz zkousel skoro vsechyn moznosti. od dedicnosti po předávaní při vytvoření v konstruktoru. normálně nemám vůbec problémy ale tohle mi vážně nejde. Až se stydím za svou pitomost.
|
||
BetaCam Profil |
#17 · Zasláno: 13. 1. 2008, 22:46:37
Mastodont
Přesně ta třída je opravdu navržena dost divoce. |
||
Mastodont Profil |
#18 · Zasláno: 13. 1. 2008, 22:49:47
Dušan
Když jsem opravil to construct a $this->handler, a dále jsem změnil jednu metodu na public function spojit() { $spojeni = $this->vytvoritDbSpojeni(); $this->ukazDbSpojeni($spojeni); return $this->dbSpojeni; } tak mi to žádnou chybu nehází. |
||
Dušan Profil * |
#19 · Zasláno: 13. 1. 2008, 22:53:11
Tak jsme to upravil a už vím kde je chyba. nastavení modifikatoru pristupu. Jsem to rikal ze jsem byl blbec ... chlapi děkuji, vážím si vaší pomoci.
|
||
BetaCam Profil |
#20 · Zasláno: 13. 1. 2008, 22:54:35
Dušan
Vazne jsem uz zkousel skoro vsechyn moznosti. od dedicnosti po předávaní při vytvoření v konstruktoru. normálně nemám vůbec problémy ale tohle mi vážně nejde. Až se stydím za svou pitomost. Tak to vemem jinak hází ti to nějakou chybu?? Co přesně od té třídy chceš.(myslim i do budoucna) |
||
BetaCam Profil |
#21 · Zasláno: 13. 1. 2008, 22:56:10
Dušan
Tak jsme to upravil a už vím kde je chyba. nastavení modifikatoru pristupu. Uf ale byla to drina :) |
||
Dušan Profil * |
#22 · Zasláno: 13. 1. 2008, 22:58:23
Jo byla, ale přesto si vážím, že jste mi pomohli. Málo kde se vidí, že jsou lidi ochotní. Takže jen chci říct, smekám...
|
||
Časová prodleva: 16 let
|
0