|
Posted by Justin Koivisto on 09/29/05 22:34
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...
>
> 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();
>
> $nr->params_init( 0, "www.num1.com", "Link to num1", "This links to
> number 1", 0, 0 );
> $resources[] = $nr;
>
> $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?
> $nr->params_init( 0, "www.num2.com", "Link to num2", "This links to
> number 2", 0, 0 );
> $resources[] = $nr;
>
> $nr = new news_resource();
> $nr->params_init( 0, "www.num3.com", "Link to num3", "This links to
> number 3", 0, 0 );
> $resources[] = $nr;
Odd... Here's what happens for me:
<?php
class myTest{
var $_val=NULL;
var $_mark=NULL;
function init($x){
$this->_val=$x;
}
}
$testar=array();
for($i=0;$i<5;$i++){
$tmp=new myTest();
$tmp->init($i);
$testar[]=$tmp;
}
var_dump($testar);
?>
Output:
array(5) {
[0]=>
object(myTest)#1 (2) {
["_val"]=>
int(0)
["_mark"]=>
NULL
}
[1]=>
object(myTest)#2 (2) {
["_val"]=>
int(1)
["_mark"]=>
NULL
}
[2]=>
object(myTest)#3 (2) {
["_val"]=>
int(2)
["_mark"]=>
NULL
}
[3]=>
object(myTest)#4 (2) {
["_val"]=>
int(3)
["_mark"]=>
NULL
}
[4]=>
object(myTest)#5 (2) {
["_val"]=>
int(4)
["_mark"]=>
NULL
}
}
My thinking on this is that you are somehow using database calls that
are causing this to happen. What version of PHP? Let's see the
news_resource class.
--
Justin Koivisto, ZCE - justin@koivi.com
http://koivi.com
[Back to original message]
|