#35865 [NEW]: Undocumented change to behaviour of references
| From: | tigerincanada at gmail dot com | Date: | Sun, 01 Jan 2006 01:36:50 +0000 |
| Subject: | #35865 [NEW]: Undocumented change to behaviour of references | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-91317@lists.php.net to get a copy of this message | ||
From: tigerincanada at gmail dot com
Operating system: Linux 2.4.20 (Red Hat)
PHP version: 4.4.1
PHP Bug Type: Class/Object related
Bug description: Undocumented change to behaviour of references
Description:
------------
After upgrading to PHP 4.4.1 I started seeing "Fatal error: Call to a
member function on a non-object" where previously there had been none.
It appears that the behaviour of references has changed, so the the reuse
of a variable name no longer unassigns that variable name from earlier
copies of the previous contents of that variable.
The attempt at a reproduce code below doesn't actually cause the bug to
reproduce, but illustrates the type of code that was causing the problem.
I haven't worked out what feature of my more complex production code is
causing the issue, but it wasn't there before upgrading to from 4.3.11 to
4.4.1.
Googling "Fatal error: Call to a member function on a non-object PHP
4.4.1" shows up a few other people who appear to have run into a similar
unexpected issue.
Reproduce code:
---------------
Class Foo
{
var $name;
function Foo($n) {
$this->name = $n;
}
function getName() {
return $this->name;
}
}
$result =& new Foo("First");
$c =& $result;
$b = "Second";
$result =& $b;
print $c->getName();
Expected result:
----------------
"First"
Actual result:
--------------
Attempted reproduce code: "First"
Production code: "Fatal error: Call to a member function on a non-object"
In production, querying the zval of $c finds that it has somehow been set
to the value of on the the object's properties... major head-scratcher!
When I changed the code to remove the variable re-use, like this:
$c =& new Foo("First");
$b = "Second";
$result =& $b;
The problem went away...
--
Edit bug report at http://bugs.php.net/?id=35865&edit=1
--
Try a CVS snapshot (PHP 4.4): http://bugs.php.net/fix.php?id=35865&r=trysnapshot44
Try a CVS snapshot (PHP 5.1): http://bugs.php.net/fix.php?id=35865&r=trysnapshot51
Try a CVS snapshot (PHP 6.0): http://bugs.php.net/fix.php?id=35865&r=trysnapshot60
Fixed in CVS: http://bugs.php.net/fix.php?id=35865&r=fixedcvs
Fixed in release: http://bugs.php.net/fix.php?id=35865&r=alreadyfixed
Need backtrace: http://bugs.php.net/fix.php?id=35865&r=needtrace
Need Reproduce Script: http://bugs.php.net/fix.php?id=35865&r=needscript
Try newer version: http://bugs.php.net/fix.php?id=35865&r=oldversion
Not developer issue: http://bugs.php.net/fix.php?id=35865&r=support
Expected behavior: http://bugs.php.net/fix.php?id=35865&r=notwrong
Not enough info: http://bugs.php.net/fix.php?id=35865&r=notenoughinfo
Submitted twice: http://bugs.php.net/fix.php?id=35865&r=submittedtwice
register_globals: http://bugs.php.net/fix.php?id=35865&r=globals
PHP 3 support discontinued: http://bugs.php.net/fix.php?id=35865&r=php3
Daylight Savings: http://bugs.php.net/fix.php?id=35865&r=dst
IIS Stability: http://bugs.php.net/fix.php?id=35865&r=isapi
Install GNU Sed: http://bugs.php.net/fix.php?id=35865&r=gnused
Floating point limitations: http://bugs.php.net/fix.php?id=35865&r=float
No Zend Extensions: http://bugs.php.net/fix.php?id=35865&r=nozend
MySQL Configuration Error: http://bugs.php.net/fix.php?id=35865&r=mysqlcfg