Bug #8130 Updated: Changing a copy of an array affects the original

From: Date: Sun, 17 Jun 2001 08:54:11 +0000
Subject: Bug #8130 Updated: Changing a copy of an array affects the original
Groups: php.dev 
Request: Send a blank email to php-dev+get-56957@lists.php.net to get a copy of this message
ID: 8130 Updated by: jmoore Reported By: wstockal@msysgroup.com Old-Status: Open Status: Closed Bug Type: Scripting Engine problem Operating system: PHP Version: 4.0.6-dev Assigned To: Comments: This will not be fixed anytime soon. It is a deep seated problem in the implementation and fixing it would cause speed problems and numerous other problems, This is somthing that can be coded around too so should not cause massive problems. - James Previous Comments: --------------------------------------------------------------------------- [2001-04-28 15:27:42] jmoore@php.net Reproduced in 4.0.6-dev one for the bug squash --------------------------------------------------------------------------- [2001-01-06 02:38:08] cynic@php.net Confirmed in 4.0.4pl1 RC1 --------------------------------------------------------------------------- [2000-12-07 02:28:51] wstockal@msysgroup.com Is this the same as bug 6417? --------------------------------------------------------------------------- [2000-12-06 11:23:23] wstockal@msysgroup.com OK, this only affects objects in the array whose methods have been accessed. Other objects are still copies. It also works on php-4.0.3pl1 on the Win32 platform. --------------------------------------------------------------------------- [2000-12-05 20:28:28] wstockal@msysgroup.com A short script: <?php class test_class_2{ var $name; function distort_reality(){ echo("Method Called.<br>n"); return; } } $a[] = new test_class_2; $a[0]->name = 'Original'; echo('$b = $a<br>'."n"); $b = $a; echo("Original contains: {$a[0]->name}<br>n"); echo("Copy contains: {$b[0]->name}<br><p>n"); echo("Change contents for $b<br>n"); $b[0]->name = 'Copy'; echo("Original contains: {$a[0]->name}<br>n"); echo("Copy contains: {$b[0]->name}<br><p>n"); $a[0]->distort_reality(); echo('Once again, $b = $a<br>'."n"); $b = $a; echo("Original contains: {$a[0]->name}<br>n"); echo("Copy contains: {$b[0]->name}<br><p>n"); echo("Change contents for $b<br>n"); $b[0]->name = 'Copy'; echo("Original contains: {$a[0]->name}<br>n"); echo("Copy contains: {$b[0]->name}<br>n"); ?> The output from the script: $b = $a Original contains: Original Copy contains: Original Change contents for $b Original contains: Original Copy contains: Copy Method Called. Once again, $b = $a Original contains: Original Copy contains: Original Change contents for $b Original contains: Copy Copy contains: Copy Basically, if $a is an array of objects and any method of an object is called any subsequent copy of $a becomes linked to the original. Any change to the copy propagates through to the original. Configure line: './configure' '--with-config-file-path=/usr/local/stronghold/conf' '--with-apxs=/usr/local/stronghold/bin/apxs' '--enable-versioning' '--disable-debug' '--with-zlib' '--with-gd=/usr/local' '--with-gdbm' '--with-db2' '--with-mysql' '--with-xml' '--with-ldap' '--with-cpdflib=/usr/local' '--with-png-dir=/usr' '--with-jpeg-dir=/usr' '--with-tiff-dir=/usr' '--with-xpm-dir=/usr/X11R6' '--enable-sysvshm=yes' '--enable-sysvsem=yes' '--enable-track-vars=yes' '--enable-bcmath=yes' '--enable-memory-limit=yes' Running as a module under apache 1.3.14 --------------------------------------------------------------------------- The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online. ATTENTION! Do NOT reply to this email! To reply, use the web interface found at http://bugs.php.net/?id=8130&edit=2

« previous php.dev (#56957) next »