Gå til innhold

Klasser - extends problemer


Anbefalte innlegg

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!

Lenke til kommentar
Videoannonse
Annonse
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();

?>

Lenke til kommentar

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
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
Lenke til kommentar

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

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å
×
×
  • Opprett ny...