Re: Is this a bug?!!! I cna't believe! Sorry, if im wrong...

From: Date: Sun, 30 Jan 2005 17:42:16 +0000
Subject: Re: Is this a bug?!!! I cna't believe! Sorry, if im wrong...
References: 1 2 3  Groups: php.general 
Request: Send a blank email to php-general+get-207720@lists.php.net to get a copy of this message
I did a little experimenting, and it looks like foreach is misbehaving, but may I just don't get it, anyway check this out (my php version and output are below): class A { var $name; function A($str) { $this->name = $str; } } // does not work as expected. $arr = array(); $a = &new A("qaz");
$arr[0] = &$a;      unset($a);
$a = &new A("wsx"); print_r($a);
$arr[1] = &$a;      print_r($arr[1]);
print_r($arr); foreach($arr as $a) { echo "(".$a->name.")"; }
echo "\n"; //    ^-- I thought this might be the problem, hence:
foreach($arr as $b) { echo "(".$b->name.")"; } echo "\n--\n"; // works as expected $arrB = array(); $arrB[0] = &new A("qaz"); $arrB[1] = &new A("wsx"); print_r($arrB); foreach($arrB as $c) { echo "(".$c->name.")"; } echo "\n--\n"; // works as expected $arrC = array(); $f = new A("qaz"); $arrC[0] = $f; $f = new A("wsx"); $arrC[1] = $f; print_r($arrC); foreach($arrC as $d) { echo "(".$d->name.")"; } echo "\n--\n"; // works as expected $arrD = array(); $h =& new A("qaz"); $arrD[0] = $h; $h =& new A("wsx"); $arrD[1] = $h; print_r($arrD); foreach($arrD as $g) { echo "(".$g->name.")"; } echo "\n--\n"; // both items in the array reference the // second object (references $i) - this is correct $arrE = array(); $i = new A("qaz"); $arrE[0] =& $i; $i = new A("wsx"); $arrE[1] =& $i; print_r($arrE); foreach($arrE as $j) { echo "(".$j->name.")"; } echo "\n--\n"; --- which gives the following output on PHP 5.0.2 (cli) (built: Nov 9 2004 19:00:36): A Object (
    [name] => wsx
) A Object (
    [name] => wsx
) Array (
    [0] => A Object
        (
            [name] => qaz
        )
    [1] => A Object
        (
            [name] => wsx
        )
) (qaz)(qaz) (qaz)(qaz) -- Array (
    [0] => A Object
        (
            [name] => qaz
        )
    [1] => A Object
        (
            [name] => wsx
        )
) (qaz)(wsx) -- Array (
    [0] => A Object
        (
            [name] => qaz
        )
    [1] => A Object
        (
            [name] => wsx
        )
) (qaz)(wsx) -- Array (
    [0] => A Object
        (
            [name] => qaz
        )
    [1] => A Object
        (
            [name] => wsx
        )
) (qaz)(wsx) -- Array (
    [0] => A Object
        (
            [name] => wsx
        )
    [1] => A Object
        (
            [name] => wsx
        )
) (wsx)(wsx) -- news.php.net wrote:
No


« previous php.general (#207720) next »