/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Reference til object
Fra : Thomas Lindgaard


Dato : 18-02-02 22:09

Halløjtaler

Jeg er ved at lave lidt graffarvning.

Min graf er repræsenteret ved en instans af en graf-klasse, som indeholder
en liste af knuder (instanser af en knude-klasse).

Nu vil jeg gerne kunne forbinde knuderne, således at hver knude har en liste
af børn (de knuder man kan nå til fra den pågældende knude). Denne liste
_skal_ indeholde referencer - da det at farve knude "bla" rød skal kunne ses
i alle de børnelister, hvor "bla" indgår... og det kan jeg ikke, hvis hver
enkelt børneliste indeholder sin egen kopi af "bla"-objektet.


Altså: Hvordan kan jeg komme til at returnere en reference til et objekt?
Jeg har prøvet følgende:

class Vertex {
// Constructor og alt det andet gejl

function return_ref1() { return &$this; }

function &return_ref2() { return $this; }

function return_ref3() { return $this; }

function &return_ref4() { return &$this; }
}

.... men 1 og 4 vil PHP ikke acceptere pga. & foran $this, og de to andre
giver mig kopier og ikke referencer.

Jeg kan godt lave en reference til objektet selv ved f.eks. at skrive
følgende i constructoren:

$this->ref_self = &$this;

så hvorfor må jeg ikke returnere det fra en funktion osse?


Hmm... nu er det her vist ved at blive en lang smøre. Spørgsmålet kort:
Hvordan kan jeg skrive en metode, som returnerer en reference til objektet
selv?

Hyggehejsa
/Thomas



 
 
Anders Johannsen (19-02-2002)
Kommentar
Fra : Anders Johannsen


Dato : 19-02-02 10:18

"Thomas Lindgaard" <thomas@it-snedkeren.dk> wrote in message
news:3c716d77$0$237$edfadb0f@dspool01.news.tele.dk...

> Altså: Hvordan kan jeg komme til at returnere en reference til et objekt?

'=' bevirker at der bliver returneret en kopi af objektet.
'=&' bevirker at der bliver returneret en reference til objektet.

'function' bevirker at der bliver returneret en kopi af objektet
'function &' bevirker at der bliver returneret en reference til objektet

Se nedenstående eksempel:

<?php

class Test {
function &self() { return $this; }
}

$test1 =& new Test();
$test1->before = TRUE;

$test2 =& $test1->self();

$test1->after = TRUE;

print_r($test1);
print_r($test2);

?>

giver

test Object
(
[before] => 1
[after] => 1
)
test Object
(
[before] => 1
[after] => 1
)

/A



Thomas Lindgaard (19-02-2002)
Kommentar
Fra : Thomas Lindgaard


Dato : 19-02-02 13:40

Jowjow - nu virker det... man skal bare huske at sætte de der &'er de
RIGTIGE steder :)

Men antag nu, at jeg har et array af referencer til knuder i min graf, og at
jeg gerne vil løbe dem igennem. Det kan jeg gøre på følgende vis:

while ( list($key, $vertex) = each($vertex_array) ) { ... }

.... men det giver mig en kopi af vertex, så vidt jeg kan se. Hvordan kan jeg
løbe min knuder igennem på en måde, så jeg får referencerne?

/Thomas



Anders Johannsen (19-02-2002)
Kommentar
Fra : Anders Johannsen


Dato : 19-02-02 14:31

"Thomas Lindgaard" <thomas@dnspilot.com> wrote in message
news:a4th1m$2bnl$1@news.cybercity.dk...

> Men antag nu, at jeg har et array af referencer til knuder i min graf, og
at
> jeg gerne vil løbe dem igennem. Det kan jeg gøre på følgende vis:
>
> while ( list($key, $vertex) = each($vertex_array) ) { ... }

(utestet)

foreach ($vertex_array as $key => $val) {
$vertex =& $vertex_array[$key];
}

for ($i = 0; $i < sizeof($vertex_array); $i++) {
$vertex =& $vertex_array[$i];
}

/A




Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste