[PHP] iets byRef meegeven aan een functie?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • D-RiSe
  • Registratie: September 2000
  • Laatst online: 29-08 19:39

D-RiSe

Kick the baby

Topicstarter
ik heb de volgende code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class a {
var $b;
function a(&$tb) {
    $this->b = $tb;
}
function getB() {
    return($this->b);
}
}

class b {
var $s;
function b($as) {
    $this->s = $as;
}
function setS($ns) {
    $this->s = $ns;
}
function getS() {
    return($this->s);
}
}

$theB = new b("1");
$a1 = new a(&$theB);
$theB->setS("2");
$a2 = new a(&$theB);

$b1 = $a1->getB();
$b2 = $a2->getB();

echo($b1->getS());
echo($b2->getS());


Nu gaat het hier even om:

PHP:
1
2
3
4
$theB = new b("1");
$a1 = new a(&$theB);
$theB->setS("2");
$a2 = new a(&$theB);


de waard in $s in class b is nu dus "2" , maar als uitvoer geeft ie 12 terwijl ik dus 22 wil.... dus de class b in $a1 heeft voor $s nog steeds de waarde "1"....

mischien een beetje vaag uitgelegd maar ik geloof dat het probleem zo wel duidelijk is.....

intel silver reef, celly 2.0 Ghz, 256mb ddr, G2MX


Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
PHP:
1
2
3
4
$a1 = new a(new b("1")); 
$theB = &$a1->getB();
$theB->setS("2"); 
$a2 = new a($theB);


Waarom dit wel werkt: "new" geeft altijd een reference naar een object terug. Op het moment dat je theB eerst aanmaakt en dan aan a hangt, maakt ie altijd een copy van je reference, hetgeen dus betekent dat de member variabele $b van $a niet dezelfde object-reference is als $theB. Door hem eerst uit $a1 te getten haal je de referentie dus wel op, en verandert de boel mee. Vaag? Ja...ik vind dit ook vaag en probeer maar een logische oplossing te verzinnen :P

overigens, class a kan er gewoon zo uitzien:

PHP:
1
2
3
4
5
6
7
8
9
class a { 
var $b; 
function a($tb) { 
    $this->b = $b; 
} 
function getB() { 
    return($this->m_b); 
} 
}


Dus geen & nodig...waarom niet: omdat object-vars altijd references naar hun instances zijn.

Zie ook Wanneer een & gebruiken?

Acties:
  • 0 Henk 'm!

Verwijderd

Waar staat die & eigenlijk voor (just curious), want die ben ik nog nooit tegen gekomen joh ...

Acties:
  • 0 Henk 'm!

  • D-RiSe
  • Registratie: September 2000
  • Laatst online: 29-08 19:39

D-RiSe

Kick the baby

Topicstarter
net nog even geprutst maar dit heeft wel het gewenste resultaat:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class a {
var $b;
function a(&$tb) {
    $this->b = &$tb;
}
function getB() {
    return($this->b);
}
}

class b {
var $s;
function b($as) {
    $this->s = $as;
}
function setS($ns) {
    $this->s = $ns;
}
function getS() {
    return($this->s);
}
}

$theB = new b("1");
$a1 = new a(&$theB);
$theB->setS("2");
$a2 = new a(&$theB);

$b1 = $a1->getB();
$b2 = $a2->getB();

echo($b1->getS());
echo($b2->getS());


dus alleen hier verschil ("&")
PHP:
1
    $this->b = &$tb;


resultaat is nu dus wel "22"

intel silver reef, celly 2.0 Ghz, 256mb ddr, G2MX


Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
oja dat kan idd ook