13. december 2008 - 11:38Der er
17 kommentarer og 1 løsning
methods overskriver hinanden i extended klasse
Hey
Jeg har et problem med en extended class. Jeg har:
abstract class start { public $db; public function __construct() { $this->db = mysql_connect_lala; } }
hvor jeg i min start klasse laver en forbindelse til databasen når den initialiseres. Så har jeg en anden klasse..
class login extends main { public function __construct($u, $p) { $q = $this->db->query(check login sql query snask); } }
når jeg så kører min login class, så er det somom, at dens __construct OVERSKRIVER den __construct i min start klasse. Jeg kan i hvert fald ikke få adgang til min $this->db variabel..
Nogen der kender et trick, så den __construct i min login klasse ikke disabler den i min start klasse?
Lad mig sige sådan, hvis jeg sletter min __construct i login klassen, og laver f.eks.
public function doLogin($u, $p)
og bruger min $this->db deri, så virker det perfekt.
Jeg har som sagt en mistanke om, at den __construct jeg har i min login klasse, simpelthen sætter den __construct i min startklasse ud af spil, og dermed bliver $db aldrig tildelt en værdi.
Kan man ikke på en måde sige til den __construct i min login klasse, at den skal køre videre på __construct fra min start klasse? Eller i hvert fald ikke overskrive den..!
Kan ikke lige komme på det. Men et alternativ ville være at omdøbe __construct i din login-class noget andet og så selv kalde den med $start->db->nyt_navn(). Jeg kan dog godt forstå hvis du ikke bryder dig om den løsning, men kan pt ikke komme på noget bedre
Hvis du siger, at den også overskriver hvis du omdøber __construct i start-classen til start() og __construct i login-classen til main() altså så de hedder det samme som classen, burde den ikke overskrive.
Det er vel egentlig logisk nok. Når du extender den første classe, kalder du jo som sådan aldrig dens constructor. Du overskriver jo dens constructor. Så løsningen må være, at du når du opretter et objekt,
1) Du omdøber din anden constructor og kalder den efter at objektet er lavet
eller
2) Du bibeholder din anden constructor og udvider den, så den også gør det samme som den første
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.