Reply to Re: Arrays and Pointers

Your name:

Reply:


Posted by Justin Koivisto on 09/29/05 22:42

thehuby wrote:

> I have come across an issue using arrays ond objects; I am using an
> array to keep track of 'n' number of object(The code snippet below is
> from my initial testing)
>
> I first declare the object ($nr = new news_resource();), then call a
> function of the object ($nr->params_init(); ). This is the put into
> the first element of the db, I then call the function again and put the
> object in the next element array.
>
> However when I print it all out at the end, all the elements of the
> array store the object with the same values...

Oops, I didn't read it close enough...

> if I redeclare the object ($nr = new news_resource(); ) again, before
> calling the funciton then it gets added in fine.
>
> I'm sure its a typical behaviour and is to do with pointers - but I
> don't understand why reassiging the object ($obj = new my_class() )
> before callings its funciton should break the link to the original
> object (and maintain its state).
>
> In my mind it should either always put a copy in the array or else
> always be a pointer.
>
> Can anyone explain why PHP works this way?
>
> Code snippet below:
>
> $nr = new news_resource();

Assume:
$nr == 0xffff6224

> $nr->params_init( 0, "www.num1.com", "Link to num1", "This links to
> number 1", 0, 0 );
> $resources[] = $nr;

$resources[0] == 0xffff6224

> $nr = new news_resource(); //why does this mean that the code works
> and the array keeps a copy of the object instead of a pointer?

If you do the above line:
$nr == 0xffff65a4

Otherwise:
$nr == 0xffff6224

> $nr->params_init( 0, "www.num2.com", "Link to num2", "This links to
> number 2", 0, 0 );
> $resources[] = $nr;

If you reset $nr with new:
$nr == 0xffff6c40

else:
$resources[1] == 0xffff6224

> $nr = new news_resource();
> $nr->params_init( 0, "www.num3.com", "Link to num3", "This links to
> number 3", 0, 0 );
> $resources[] = $nr;

If you reset $nr with new:
$nr == 0xffff7cc2

else:
$resources[2] == 0xffff6224

So now you have 2 possible outputs:

not resetting $nr each time:
array(
0xffff6224
0xffff6224
0xffff6224
0xffff6224
);

Resetting $nr using "new" each time:
array(
0xffff6224
0xffff65a4
0xffff6c40
0xffff7cc2
);

Look at the above numbers assuming they are memory addresses... do you
see why it behaves that way?

--
Justin Koivisto, ZCE - justin@koivi.com
http://koivi.com

[Back to original message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация