[2005年10月07日 18:33 UTC] oliver dot graetz at gmx dot de
Description: ------------ I wrote a class implementing ArrayAccess that should behave like a normal array to the outside world. So If I used an element in this array it should be usable like any other array. But there was a problem if the "array" elements were arrays themselves. I got this error: Fatal error: Objects used as arrays in post/pre increment/decrement must return values by reference in t.php on line 123 OK, you want a reference, you get it. I changed offsetGet to &offsetGet. This worked fine with PHP5.0. But in PHP5.1 the parser became more picky about this: Fatal error: Declaration of WAF_Config::offsetGet() must be compatible with that of ArrayAccess::offsetGet() in myclass.php on line 234 This is correct but it makes implementing ArrayAccess in a way consistent with ordinary arrays impossible! Reproduce code: --------------- <?php class test implements ArrayAccess { private $data=array(); function offsetSet($key,$value) { $this->data[$key] = $value; } // function &offsetGet($key) { return $this->data[$key]; } function offsetGet($key) { return $this->data[$key]; } function offsetUnset($key) { if (array_key_exists($key,$this->data)) { unset($this->data[$key]); } } function offsetExists($key) { return array_key_exists($key,$this->data); } } $t=new test(); $t['huba']=array('one','two'); $t['huba'][]='three'; print_r($t['huba']); Expected result: ---------------- Array ( [0] => one [1] => two [2] => three ) Actual result: -------------- using offsetGet Fatal error: Objects used as arrays in post/pre increment/decrement must return values by reference in t.php on line 17 using &offsetGet Fatal error: Declaration of test::offsetGet() must be compatible with that of ArrayAccess::offsetGet() in t.php on line 2 PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2005年10月07日 19:07 UTC] oliver dot graetz at gmx dot de
[2005年10月07日 19:14 UTC] oliver dot graetz at gmx dot de
[2005年10月07日 20:20 UTC] helly@php.net
[2005年10月07日 21:41 UTC] oliver dot graetz at gmx dot de
[2005年10月07日 22:40 UTC] oliver dot graetz at gmx dot de
[2005年10月07日 23:09 UTC] oliver dot graetz at gmx dot de
[2010年08月03日 16:27 UTC] georgwaechter at googlemail dot com
[2011年05月26日 03:43 UTC] tohru at reedom dot com
[2013年04月16日 04:59 UTC] me at achronos dot ca
|