jeg_lyver_mye Skrevet 5. september 2007 Del Skrevet 5. september 2007 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
Torkild Skrevet 5. september 2007 Del Skrevet 5. september 2007 Problemet her er jo at $this->var aldri blir satt, fordi system::set() aldri blir kjørt. prøv å legg til $this->set($var); mellom de to nederste linjene. Lenke til kommentar
CronoMan Skrevet 6. september 2007 Del Skrevet 6. september 2007 (endret) 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 6. september 2007 av CronoMan Lenke til kommentar
Ernie Skrevet 6. september 2007 Del Skrevet 6. september 2007 (endret) 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 6. september 2007 av Ernie Lenke til kommentar
jeg_lyver_mye Skrevet 6. september 2007 Forfatter Del Skrevet 6. september 2007 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 Skrevet 6. september 2007 Del Skrevet 6. september 2007 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
itsmebth Skrevet 6. september 2007 Del Skrevet 6. september 2007 -snip- 9438062[/snapback] Her vil det være bedre å bruke protected, som betyr at klassen og alle klasser som utvider den har tilgang. 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å