ID:               43600
 Updated by:       [EMAIL PROTECTED]
 Reported By:      6eWmA67gxAebq at jeanpierredaviau dot com
-Status:           Open
+Status:           Bogus
-Bug Type:         Output Control
+Bug Type:         Class/Object related
 Operating System: win xp
 PHP Version:      5.2CVS-2007-12-14 (snap)
-Assigned To:      
+Assigned To:      colder
 New Comment:

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

unset($a) or $a = NULL; only affects the current variable, unless this
variable represents the last one holding a reference to the object, the
object won't be destroyed.

For example:

$a = new StdClass;
$b = $a;
$a = NULL; // $b is still holding the instance.

same with unset:

$a = new stdClass;
$b = $a;
unset($a); // $b is still holding the var

You could have the object destroyed by $a = NULL; if $b was a reference
to $a. but in case of arrays the array element is not removed: you
should do such cleaning manually.
The behavior you notice is expected and has nothing specific to do with
"static arrays".


Previous Comments:
------------------------------------------------------------------------

[2007-12-18 12:42:57] [EMAIL PROTECTED]

Documentation says:
"When assigning an already created instance of a class to a new
variable, the new variable will access the same instance as the object
that was assigned. This behaviour is the same when passing instances to
a function."

Using PHP 5.3.0-dev (cli) (built: Dec 17 2007 10:53:40):

<?php

$obj = new stdClass;

$a = $obj;

unset($obj);

var_dump($a, $obj);

?>

Output:

object(stdClass)#1 (0) {
}
NULL

------------------------------------------------------------------------

[2007-12-15 01:06:37] [EMAIL PROTECTED]

Clarifying example:

<?php 

class foo {
        static $foo = array();
        static function test($obj) {
                self::$foo[] = $obj;
        }
}

class bar {
        public function __construct() {
                foo::test($this);
        }
}

$a = new bar;
unset($a);
var_dump(foo::$foo); // He expects empty array

?>

------------------------------------------------------------------------

[2007-12-14 21:23:39] 6eWmA67gxAebq at jeanpierredaviau dot com

Description:
------------
a static array dont retain a modification

PHP 5.2.2 (cli) (built: May  2 2007 19:18:26)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
    with DBG v2.15.5, (C) 2000,2007, by Dmitri Dmitrienko


Reproduce code:
---------------
http://groups.google.com/group/alt.comp.lang.php/msg/79060a6a7c4c806e

Expected result:
----------------
print_r (Registre::getRegistre());
Array 
( 
    [0] => info2 Object 
        ( 
            [var] => 0 
            [class] => info2 
        ) 
) 

Actual result:
--------------
$a = new info(); 
$b = new info2(); 
$a = NULL; 
print_r (Registre::getRegistre());   //dont print the changed
self::$leRegistre 
Array 
( 
    [0] => info Object 
        ( 
            [var] => 0 
            [class] => info 
        ) 


    [1] => info2 Object 
        ( 
            [var] => 0 
            [class] => info2 
        ) 
) 


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=43600&edit=1

Reply via email to