Gå til innhold

Klasser - extends problemer


Anbefalte innlegg

Hei,

 

Jeg har aldri brukt extends før, når det kommer til klasser, så jeg har nok missforstått noe ille her:

 

PHP
<?php

 

$var 'maasse rarart!!!';

 

class system {

function set(&$var) {

$this->var = &$var;

}

}

 

$system = new system();

$system->set(&$var);

 

class test extends system {

function index() {

echo $this->var;

}

}

 

$test = &new test();

$test->index();

 

Hvorfor vil ikke koden over printe ut, funker ikke det prinsippet? Noen måte å få det til å funke på? Slik at alle variabler og egenskaper i system kan bli med i klasse bare ved at jeg skriver extends system?

 

Takk!

Lenke til kommentar
Videoannonse
Annonse

Uhm, PHP er nok ikke det beste språket å lære seg objekt orientering i... for å forstå prinsippene bør du nok heller finne ut av det i C++, C# eller Java..

 

For det første er ikke $var en del av objektet test eller system, og den er ikke satt som global i set-funksjonen, så du får ikke tak i den.

 

så om du vil ha den til å funke :

 

$var = "masse rart";

class system
{
 function set($v)
 {
    global $var;
    $var = $v;
 }
}

class test extends system
{
 function index()
 {
   global $var;
   echo $var;
 }
}

 

$this referer til objektet koden er i, for eksempel om jeg har $mongo = new test(); vil $this inne i en funksjon i klassen referere til $mongo. i dette tilfellet er $var en "global" variabel, og ikke en del av klassene test eller system.

Endret av CronoMan
Lenke til kommentar

CronoMan: Det der er aldeles grusomt. Hva i alle dager skal man med klasser hvis du bruker global sånn?

 

Uannsett, problemet her er at trådstarter har misforstått et par ting. Extends utvider en klasse, ikke et objekt, og variabler må defineres i klassen. I tillegg må naturlig nok variablen ha en verdi før det er noe poeng å skrive den ut.

 

Ser man på koden skulle det derfor vært slik:

PHP
<?php

 

$var = 'maasse rarart!!!';

 

class system {

private $var;

    function set(&$var) {

        $this->var = &$var;

    }

}

 

//$system = new system();

//$system->set(&$var);

 

class test extends system {

    function index() {

        echo $this->var;

    }

}

 

$test = &new test();        

$test->set(&$var);

$test->index();

?>

Endret av Ernie
Lenke til kommentar

Takk Ernie!

$var måtte være public. så dette funka:

 

PHP
<?php

 

$var 'maasse rarart!!!';

 

class system {

public $var;

function system(&$var) {

$this->var = &$var;

}

}

 

class test extends system {

function index() {

echo $this->var;

}

}

 

$test = &new test(&$var);

$test->index();

 

Takk!

Lenke til kommentar
CronoMan: Det der er aldeles grusomt. Hva i alle dager skal man med klasser hvis du bruker global sånn?

9437925[/snapback]

 

Jeg vet, jeg fikk inntrykket av at han ville ha en global variabel, for hvis ikke ville ikke $var øverst ha en funksjon.. og det var derfor jeg sa at det er litt håpløst å lære objekt orientering fra et språk som egentlig ikke er objektorientert. I følge koden han først gav, skulle "test"-klassen endre en variabel $var, men de to objektene var ikke samme objekt, som ville bety at de ikke vil kunne ha tilgang til egenskaper (med mindre variabelen var statisk) og derfor tok jeg det som at han ville endre en global variabel.

 

Men som sagt, ikke ta objektorientering med utgangspunkt i PHP, du vil bare bli forvirret om du noen gang begynner med mer "utfyllende" verktøy som asp.net

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å
  • Hvem er aktive   0 medlemmer

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