Edit report at https://bugs.php.net/bug.php?id=49538&edit=1

 ID:                 49538
 Updated by:         le...@php.net
 Reported by:        kevinpeno at gmail dot com
 Summary:            ArrayAccess Force implement append
-Status:             Open
+Status:             Wont fix
 Type:               Feature/Change Request
 Package:            SPL related
 Operating System:   ALL
 PHP Version:        5.3.0
 Block user comment: N
 Private report:     N

 New Comment:

Thank you for your input.  However, the current API allows you to override the 
append behavior. It may have been nice to have split these when they were 
created, 
but it has already been finished and it's not going to change.

function offsetSet($k, $v) {
    if ($k === NULL) {
        $this->append($v);
    } else {
        parent::offsetSet($k, $v);
    }
}


Previous Comments:
------------------------------------------------------------------------
[2009-09-12 22:18:50] kevinpeno at gmail dot com

Dumbass moment on the offsetSet bug. Please ignore that part :P The rest I 
still would like to see though :)

------------------------------------------------------------------------
[2009-09-12 22:16:28] kevinpeno at gmail dot com

Description:
------------
ArrayAccess should force the implementation of append to cover the case of 
$array[] = somevalue so that one can properly handle values appended in this 
manner. Additionally, most internal classes implementing ArrayAccess add their 
own append method anyway and this would provide some sort of naming standard.

Examples of conflicts in naming include ArrayObject::append() and 
SplDoublyLinkedList::push()

Reproduce code:
---------------
<?php
class MyArrayObject extends ArrayObject
{
        function append( $v )
        {
                //Should print the value if value appended
                var_dump( 'Append:', $value );
        }

        function offsetSet( $k, $v )
        {
                //Will Print OffsetSet: \n NULL \n NULL - See 
http://bugs.php.net/bug.php?id=49537
                var_dump( 'offsetSet:', $k, $value );
        }

}

$test = new MyArrayObject();
$test[] = 'test';
?>

Expected result:
----------------
MyArrayObject::append() called rather than MyArrayObject::offsetSet()

Actual result:
--------------
MyArrayObject::offsetSet() is called


------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=49538&edit=1

Reply via email to