Gå til innhold

Klasser - extends problemer


Anbefalte innlegg

Skrevet

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 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!

Videoannonse
Annonse
Skrevet
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 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();

?>

Skrevet
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.

Skrevet

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?

Skrevet

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

Skrevet (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 av CruellaDeVille
Skrevet

&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 :)

Skrevet
&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).

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...