ID: 32789 Updated by: [EMAIL PROTECTED] Reported By: php at thoftware dot de -Status: Open +Status: Bogus Bug Type: Arrays related Operating System: * PHP Version: 4.3.11 New Comment:
Sorry, but your problem does not imply a bug in PHP itself. For a list of more appropriate places to ask for help using PHP, please visit http://www.php.net/support.php as this bug system is not the appropriate forum for asking support questions. Due to the volume of reports we can not explain in detail here why your report is not a bug. The support channels will be able to provide an explanation for you. Thank you for your interest in PHP. bugs is not a helpdesk - please leave this as bogus and ask on php-general. Previous Comments: ------------------------------------------------------------------------ [2005-04-22 15:56:37] php at thoftware dot de Sorry again, maybe I should stop coding %-(, this is the real Actual result: -------------- it's forever mine noone else should be able to change it it's mine this is my cache for the example directly above ... ------------------------------------------------------------------------ [2005-04-22 15:54:09] php at thoftware dot de Sorry, the fatal error results from the result of cache() being an empty array (but that may be another bug?), correct code should be: Reproduce code: --------------- class foobar { var $cache = array(); function cache() { if (!count($this->cache)) { $this->cache[1] = array( 'this is my cache<br>', 'it\'s mine<br>', 'noone else should be able to change it<br>', 'it\'s forever mine<br>', ); } return($this->cache[1]); } } $foobar =& new foobar(); echo array_pop($foobar->cache()); echo array_pop($foobar->cache()); echo array_pop($foobar->cache()); echo array_pop($foobar->cache()); Expected result: ---------------- it's forever mine it's forever mine it's forever mine it's forever mine Actual result: -------------- Fatal error: Only variables can be passed by reference in ... Using a static variable within the method will work like the example using a plain function, using an object-variable will work like shown above, even if you remove the '[1]'-part. ------------------------------------------------------------------------ [2005-04-22 15:46:13] php at thoftware dot de And again using an object: Reproduce code: --------------- class foobar { var $cache = array(); function cache() { if (!isset($this->cache)) { $this->cache = array( 'this is my cache<br>', 'it\'s mine<br>', 'noone else should be able to change it<br>', 'it\'s forever mine<br>', ); } return($this->cache); } } $foobar =& new foobar(); echo array_pop($foobar->cache()); echo array_pop($foobar->cache()); echo array_pop($foobar->cache()); echo array_pop($foobar->cache()); Expected result: ---------------- it's forever mine it's forever mine it's forever mine it's forever mine Actual result: -------------- Fatal error: Only variables can be passed by reference in ... Using a static variable within the method will work like the example using a plain function, using an object-variable causes a fatal error. ------------------------------------------------------------------------ [2005-04-22 15:38:05] php at thoftware dot de How about this one? Reproduce code: --------------- function cache() { static $cache=array(); if (!count($cache)) { $cache[1] = array( 'this is my cache<br>', 'it\'s mine<br>', 'noone else should be able to change it<br>', 'it\'s forever mine<br>', ); } return($cache[1]); } echo array_pop(cache()); echo array_pop(cache()); echo array_pop(cache()); echo array_pop(cache()); Expected result: ---------------- it's forever mine it's forever mine it's forever mine it's forever mine Actual result: -------------- it's forever mine noone else should be able to change it it's mine this is my cache Note: If you remove the '[1]'-part, it works as expected. I think this part of the problem is not an array_pop()-bug but a bug within the reference-system? ------------------------------------------------------------------------ [2005-04-22 14:31:53] php at thoftware dot de The variables in the object must not be changed! That's the reason why I don't use &cache()! Either should PHP state that it's not allowed to use cache() as an argument for array_pop() or array_pop() shouldn't change the data of the object because cache isn't supposed to return a reference. Look at the first example - expected result is an unchanged object resp. an error-message. The second example was only to show to you, that PHP recognizes that the method _isn't_ passed as a variable when it is assigned to a variable before (that's bogus in my eyes). Why do you make this bug-report bogus? I'm sorry for my maybe bad english, but is it really not understandable what I'm trying to explain? Then you may simply take the fact, that Reproduce code: --------------- $foobar =& new foobar(); echo array_pop($foobar->cache(3)); $v = $foobar->cache(3); echo $v['time']; works in some way, while Reproduce code: --------------- $foobar =& new foobar(); $v = $foobar->cache(3); echo $v['time']; echo array_pop($foobar->cache(3)); causes an fatal error and accept this as a bug? ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/32789 -- Edit this bug report at http://bugs.php.net/?id=32789&edit=1