|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2005-08-05 16:27 UTC] ast at gmx dot ch
Description: ------------ Abstract: ------------------- PHP 4.4.0 shows a "Notice: Only variable references should be returned by reference in ..." Notice when it shouldn't. The bug can only be reproduced with PHP 4.4.0. And it can only be reproduced on a few systems, on most it returns the expected result (all test platforms had error_reporting(E_ALL);). Furthermore, code that seems to be equivalent doesn't result in a Notice. And two different systems with almost the same setup don't show the same results. I couldn't isolate the bug further than this. Maybe it's a compile options issue, maybe it has to do with the scope of variables, I don't know. Disclaimer: ------------------- You may think this is another bogus bug report for the return-by-reference / assign-by-reference / pass-by-reference Notices in PHP 4.4.0. But I'm quite sure it isn't. I've patched our framework and wrote some recommendations on how to code the right way: http://gallery.menalto.com/index.php?name=PNphpBB2&file=viewtopic&t=32907 . But you don't need to follow this link. I just want to point out that this is a real issue. Details: ------------------- Please take a look at the reproduce script. Reproduce code: --------------- http://dev.nei.ch/bugs/php440_notice_bug/php440_notice_bug_on_certain_platforms.phps Expected result: ---------------- Expected result: ---------------- PHP Version is: 4.4.0 no NOTICEs Actual result: -------------- Actual result: -------------- php version is: 4.4.0 Notice: Only variable references should be returned by reference in php440_notice_bug_on_certain_platforms.php on line 23 PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Tue Nov 04 20:00:01 2025 UTC |
Here's the reproduce code: <?php error_reporting(E_ALL); if (version_compare(PHPVERSION(), '4.4.0') != 0) print "This reproduce code is only for PHP 4.4.0"; $bar = new Bug(); $baz = $bar->foo(); class Bug { var $_flag; function Bug() { $this->_flag = 0; } function &foo() { if (!$this->_flag) { $false = false; return $false; /* this is line 18 */ } $false = false; return $false; } } ?> Expected result: ---------------- no NOTICEs Actual result: -------------- Notice: Only variable references should be returned by reference in reproduce.php on line 18 I've added the two other methods in the original reproduce code just to show that very slight modifications of the code do not give a PHP Notice. And please remember that I can't reproduce it on all systems.