[PHP] Reference returnen en aanpassen gaat niet goed

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Ik heb (hier vereenvoudigd) het volgende scriptje:

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
class bla()
{
   var $test;
}

$aKeys = Array(0);

$aData[0] = bla();
$aData[0]->test = false;


function &getObject($oObject)
{
   global $aData, $aKeys;

   foreach ($aKeys as $iIndex => $sValue)
   {
      foreach ($aData[$sValue] as $iPosition => $oData)
      {
         //if (conditie)
            return $oData;
      }
   }
}


$oTmp =& getObject($oOtherObject);
$oTmp->test = true;

echo $aData[0]->test // GEEFT FALSE :S ??

Ik hoop dat de code mijn probleem beetje duidelijk illustreerd. Ik return dus een reference naar een object. Die veranderd ik, maar het veranderd helemaal niet in het object waarnaar gerefereerd zou moeten worden :? Weet iemand hoe ik dit netjes op moet lossen? (PHP Version 4.3.10)

edit:
http://nl.php.net/references.return

[ Voor 16% gewijzigd door r0bert op 23-01-2005 20:38 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Volgens mij worden objecten in PHP4 altijd by value doorgestuurd, in PHP5 zou dit wel goed moeten werken.
PHP4 is sowieso mager in het ondersteunen van OO.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op zondag 23 januari 2005 @ 20:32:
Volgens mij worden objecten in PHP4 altijd by value doorgestuurd, in PHP5 zou dit wel goed moeten werken.
PHP4 is sowieso mager in het ondersteunen van OO.
Iets returnen by reference heeft weinig tot niets met OO te maken. Je kan een integer ook by reference returnen.


Volgens PHP.net klopt deze manier van werken. Ik heb dan ook het idee dat je ergens anders in je code een fout maakt. Misschien klopt die if conditie die je nu niet laat zien wel niet? Verder zijn er betere manieren om dit soort dingen te doen dan het gebruik van globals. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Terranca
  • Registratie: April 2000
  • Laatst online: 18-09 18:25
Als ik me niet vergist dan maakt foreach ook kopien aan van objecten ipv references.
Dus wat je zou kunnen proberen is van elke foreach call iets in de richting van
PHP:
1
foreach ( $aObject as $id => &$Object )

maken. Weet niet zeker of het zo werkt, maar zo niet moet je ff kijken bij foreach op de php site