Beethoven Skrevet 22. februar 2007 Del Skrevet 22. februar 2007 Hei, Jeg skjønner ingenting, trodde extends gjorde at en klasse arva alle egenskapene til en annen jeg?! PHP <?php class a { function hehe() { $this->var = 'okkk....'; } } class b extends a { function __construct() { echo $this->var; } } $a = new a(); $b = new b(); ?> Men kjører jeg følgende får jeg: Notice: Undefined property: b::$var in /Applications/MAMP/htdocs/fw/1/test.php on line 15 Og det skriver ikke ut noe! Takk! Lenke til kommentar
CruellaDeVille Skrevet 22. februar 2007 Del Skrevet 22. februar 2007 Hei, Jeg skjønner ingenting, trodde extends gjorde at en klasse arva alle egenskapene til en annen jeg?! PHP <?php class a { var $var; //<-- denne mangler, alternativt protected $var function hehe() { $this->var = 'okkk....'; } } class b extends a { function __construct() { echo $this->var; } } $a = new a(); $b = new b(); ?> Men kjører jeg følgende får jeg: Notice: Undefined property: b::$var in /Applications/MAMP/htdocs/fw/1/test.php on line 15 Og det skriver ikke ut noe! Takk! 7998189[/snapback] var $var; //<-- denne mangler, alternativt protected $var. Og når du først jobber med klasser i php5 er det lurt å slenge på adgangsmodifikatorer, private, public, protected. Og så må du enten sette $var i klasse b eller kalle a's hehe()-metode <?php class a { protected $var; protected function hehe() { $this->var = 'okkk....'; } } class b extends a { public function __construct() { parent::hehe(); echo $this->var; } } $a = new a(); $b = new b(); ?> Lenke til kommentar
Beethoven Skrevet 22. februar 2007 Forfatter Del Skrevet 22. februar 2007 I see, mange takk! Men jeg må ikke sette var $var; da? Hva er vitsen med det når jeg egentlig ikek trenger det? Lenke til kommentar
CruellaDeVille Skrevet 22. februar 2007 Del Skrevet 22. februar 2007 I see, mange takk!Men jeg må ikke sette var $var; da? Hva er vitsen med det når jeg egentlig ikek trenger det? 7998596[/snapback] Du kan droppe protected $var i klasse a, men må likevel kalle parent::hehe() før du kan skrive ut noe. Lenke til kommentar
Beethoven Skrevet 22. februar 2007 Forfatter Del Skrevet 22. februar 2007 Jeg får vist ikke dette helt til jeg: PHP <?php // Se på det som det samme som new System(); $system = &loadLib('System'); // Legger inn variablene! $this->tpl = $db; Henta med global! $system->run(); // dumper jeg innholdet i $system her! så er $tpl, og $db der! Så alt stemmer hittill! class test extends System { function __construct() { // Nå finnes det plutselig ikke lenger!!! :S $this->tpl->load('index'); $this->tpl->fetch(); echo 'Vi leser nyhter!'; } } $test = new test(); ?> Hva gjør jeg galt? Lenke til kommentar
Runar0 Skrevet 22. februar 2007 Del Skrevet 22. februar 2007 tpl blir satt når du kaller run ikkje sant ? Når du extrender system får du en ny versjon av System så run er ikkje kalt enda. Er nok det som er problemet Lenke til kommentar
Beethoven Skrevet 22. februar 2007 Forfatter Del Skrevet 22. februar 2007 Hvordan skal jeg få lagt til de variabelene i system uten å gjøre det i test da? Lenke til kommentar
CruellaDeVille Skrevet 22. februar 2007 Del Skrevet 22. februar 2007 (endret) Hvordan skal jeg få lagt til de variabelene i system uten å gjøre det i test da? 8001637[/snapback] NÅ kjenner ikke jeg til klassen System, men hvis test utvider System kan test-klassen kalle run(). (hva er forresten &LoadLib('System')?) <?php class test extends System{ public function __construct(){ $this->run(); // run må være protected eller public i System $this->tpl->load('index'); $this->tpl->fetch(); echo 'Vi leser nyhter!'; } } $test = new test(); ?> Endret 22. februar 2007 av CruellaDeVille Lenke til kommentar
Beethoven Skrevet 22. februar 2007 Forfatter Del Skrevet 22. februar 2007 &LoadLib('System') er akkurat det samme som new System(); den er ikke noe problem. Så jeg må seriøst kjøres $this->run() i test? Det jeg vil at alt blir satt automatisk, så jeg slepper å gjøre det i test... så dette er eneste løsningen? Takk skal du ha forresten Lenke til kommentar
CruellaDeVille Skrevet 22. februar 2007 Del Skrevet 22. februar 2007 &LoadLib('System') er akkurat det samme som new System(); den er ikke noe problem. Så jeg må seriøst kjøres $this->run() i test? Det jeg vil at alt blir satt automatisk, så jeg slepper å gjøre det i test... så dette er eneste løsningen? Takk skal du ha forresten 8002227[/snapback] Ne, du kan ha run() i konstruktør til System, og så kalle på konstruktøren til System i test-klassen. Men oppretter du et System-objekt som du egentlig ikke har brukt for? (det ser nemlig ut som om du gjør det). Lenke til kommentar
Beethoven Skrevet 22. februar 2007 Forfatter Del Skrevet 22. februar 2007 Takk, da løser det seg! Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå