Re: Arrays and Pointers



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@xxxxxxxxx
http://koivi.com
.



Relevant Pages

  • Re: Macros in php
    ... In an empty array, the key doesn't exist, so ... I said if $var is EMPTY. ... From the PHP manual for empty: ...
    (comp.lang.php)
  • Re: Macros in php
    ... In an empty array, the key doesn't exist, so issetreturns false. ... I said if $var is EMPTY. ... From the PHP manual for empty: ...
    (comp.lang.php)
  • Re: Macros in php
    ... In an empty array, the key doesn't exist, so ... I said if $var is EMPTY. ... From the PHP manual for empty: ...
    (comp.lang.php)
  • Re: [PHP] foreach() using current() strange beahvior
    ... that's expected as foreach moves the internal array pointer, ... When using the internal pointer just by calling current(so not moving ... Unless the array is referenced, foreach operates on a copy of the ...
    (php.general)
  • Re: Need help on PHP for MPE/ix
    ... Here is the syntax of the dbupdate intrinsic in PHP: ... assoc array of item values) ... Please let me know if you have any more suggesstions to solve this problem. ... Pavan Kumar Rati wrote: ...
    (comp.sys.hp.mpe)