ID: 32983 Updated by: [EMAIL PROTECTED] Reported By: jason at amp-design dot net -Status: Assigned +Status: Closed Bug Type: SPL related Operating System: * -PHP Version: 5CVS-2005-06-19 +PHP Version: 5.0.3 Assigned To: helly New Comment:
Thank you for your bug report. This issue has already been fixed in the latest released version of PHP, which you can download at http://www.php.net/downloads.php We found out that this is not solvable without blowing up the interface and creating a BC or providing an additional interface to support references and thereby creating an internal nightmare - actually i don't see a way we can make that work ever. Thus we decided to enforce the original design and disallow references completley. Also the error message should have changed with 5.0.4 or is being changed with 5.0.5/5.1 at least Previous Comments: ------------------------------------------------------------------------ [2005-08-16 07:44:50] sslotnick at gmail dot com I have a similar but different reproduction using two dimensional arrays instead of explicitly setting a reference. class ArrayAccessImpl implements ArrayAccess { private $data = array(); public function offsetUnset($index) {} public function offsetSet($index, $value) { $this->data[$index] = $value; } public function offsetGet($index) { return $this->data[$index]; } public function offsetExists($index) { return isset($this->data[$index]); } } $data = new ArrayAccessImpl(); $data['element'] = array(); $data['element']['element2'] = "hi"; ------------------------------------------------------------------------ [2005-05-09 19:05:42] [EMAIL PROTECTED] Actually at the moment this is a known issue which we cannot fix appropriate right away. But we are working on the matter. ------------------------------------------------------------------------ [2005-05-09 12:38:42] jason at amp-design dot net Description: ------------ I'm not 100% sure this is considered a "bug" as such, anyway, I thought I'd point it out, and let you decide. It's more a case of the error message being a little fuzzy. When trying to assign an item by reference by using the reference operator, &, to an element inside a class that implements ArrayAccess produces a werid error message. Admittedly, the code I've provided is probably not valid PHP code, because the nature of the ArrayAccess interface means that data is assigned and returned from offsetSet and offsetGet by value, so using refernces should probably not work. However, the when you do try this, you get an error about about post/pre increment/decrement. I'm not sure what this refers to, but it doesn't seem to be very descriptive. Reproduce code: --------------- <?php class ArrayAccessImpl implements ArrayAccess { private $data = array(); public function offsetUnset($index) {} public function offsetSet($index, $value) { $this->data[$index] = $value; } public function offsetGet($index) { return $this->data[$index]; } public function offsetExists($index) { return isset($this->data[$index]); } } $data = new ArrayAccessImpl(); $test = 'some data'; $data['element'] = &$test; ?> Expected result: ---------------- Unsure, probably an error message relating to the fact ArrayAccess objects can not assign by reference Actual result: -------------- Fatal error: Objects used as arrays in post/pre increment/decrement must return values by reference ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=32983&edit=1
