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

 ID:                 52861
 Comment by:         auke at muze dot nl
 Reported by:        mep_eisen at web dot de
 Summary:            unset failes with ArrayObject and deep arrays
 Status:             Open
 Type:               Bug
 Package:            SPL related
 Operating System:   Windows Vista 64
 PHP Version:        5.3.3
 Block user comment: N
 Private report:     N

 New Comment:

It's worse than this, ArrayObject gets confused on where to put the data
and mangles any containing object:



test script:



        class IWouldLikeToPointOutABug {



        }



        $buggy = new IWouldLikeToPointOutABug();



        $buggy->bug = new ArrayObject( );



        $buggy->bug['foo']['bar'] = true;



        echo "This looks normal\r\n";



        var_dump( $buggy );



        echo "This should be NULL\r\n";



        var_dump( $buggy->thisIsNotHere );



Results in:



This looks normal



object(IWouldLikeToPointOutABug)#1 (1) {

  ["bug"]=>

  object(ArrayObject)#2 (0) {

  }

}



This should be NULL



array(1) {

  ["bar"]=>

  bool(true)

}


Previous Comments:
------------------------------------------------------------------------
[2010-09-16 17:23:11] mep_eisen at web dot de

Description:
------------
Using deep arrays unset itself or ArrayObject misbehaves. It silently
does nothing.

The problem lies in iteration 3 that mixes ArrayObject and classic
arrays.

Test script:
---------------
echo "iteration1\n";



$arr = new ArrayObject();

$arr['foo'] = new ArrayObject();

$arr['foo']['bar'] = true;

unset($arr['foo']['bar']);

var_dump($arr);



echo "iteration2\n";



$arr = array();

$arr['foo']['bar'] = true;

unset($arr['foo']['bar']);

var_dump($arr);



echo "iteration3\n";



$arr = new ArrayObject();

$arr['foo']['bar'] = true;

unset($arr['foo']['bar']);

var_dump($arr);

Expected result:
----------------
iteration1

object(ArrayObject)#1 (1) {

  ["storage":"ArrayObject":private]=>

  array(1) {

    ["foo"]=>

    object(ArrayObject)#2 (1) {

      ["storage":"ArrayObject":private]=>

      array(0) {

      }

    }

  }

}

iteration2

array(1) {

  ["foo"]=>

  array(0) {

  }

}

iteration3

object(ArrayObject)#1 (1) {

  ["storage":"ArrayObject":private]=>

  array(1) {

    ["foo"]=>

    array(0) {

    }

  }

}

Actual result:
--------------
iteration1

object(ArrayObject)#1 (1) {

  ["storage":"ArrayObject":private]=>

  array(1) {

    ["foo"]=>

    object(ArrayObject)#2 (1) {

      ["storage":"ArrayObject":private]=>

      array(0) {

      }

    }

  }

}

iteration2

array(1) {

  ["foo"]=>

  array(0) {

  }

}

iteration3

object(ArrayObject)#1 (1) {

  ["storage":"ArrayObject":private]=>

  array(1) {

    ["foo"]=>

    array(1) {

      ["bar"]=>

      bool(true)

    }

  }

}


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



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

Reply via email to