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
