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