|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2006-10-19 20:56 UTC] cpriest at warpmail dot net
Description:
------------
References in temporary tables de-reference their references upon crossing function boundaries
Reproduce code:
---------------
<?php
class myClassA {
public $Name = '';
function __construct($Name) { $this->Name = $Name; }
}
global $tblData;
$tblData = array(
'Test' => new myClassA('Object 1'),
'Test2' => new myClassA('Object 2'),
);
function getReferenced() {
global $tblData;
$tblData2 = array(
'Test' => &$tblData['Test'],
'Test2' => &$tblData['Test2'],
);
return $tblData2;
}
echo '<plaintext>';
print_r($tblData);
$tblData2 = getReferenced();
$tblData2['Test']->Name = 'Object 3';
print_r($tblData2);
?>
Expected result:
----------------
I expect there to be only two objects at the end of the call, one with a Name of 'Object 3' and one with a Name of 'Object 2'
Actual result:
--------------
Three objects exist, 'Object 1', 'Object 2', and 'Object 3'
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Dec 01 13:00:01 2025 UTC |
Expected: ------------------------------------------ Array ( [Test] => myClassA Object ( [Name] => Object 3 ) [Test2] => myClassA Object ( [Name] => Object 2 ) ) Array ( [Test] => myClassA Object ( [Name] => Object 3 ) [Test2] => myClassA Object ( [Name] => Object 2 ) ) Actual: -------------------------------------------- Array ( [Test] => myClassA Object ( [Name] => Object 1 ) [Test2] => myClassA Object ( [Name] => Object 2 ) ) Array ( [Test] => myClassA Object ( [Name] => Object 3 ) [Test2] => myClassA Object ( [Name] => Object 2 ) )Where did you manage to find THREE objects here? Array ( [Test] => myClassA Object ( [Name] => Object 3 ) [Test2] => myClassA Object ( [Name] => Object 2 ) )