| 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: 19 let
|
|||
0