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

Reply via email to