Edit report at http://bugs.php.net/bug.php?id=53277&edit=1
ID: 53277
Comment by: php dot net at site dot lanzz dot org
Reported by: php dot net at site dot lanzz dot org
Summary: Setting previously undefined property on an
ArrayObject triggers weird error
Status: Open
Type: Bug
Package: *Programming Data Structures
Operating System: Linux
PHP Version: 5.2.14
Block user comment: N
New Comment:
Oops, first row should read "error_reporting(E_ALL | E_STRICT)", the
notice is not
visible as it is now.
Previous Comments:
------------------------------------------------------------------------
[2010-11-09 12:29:18] php dot net at site dot lanzz dot org
Description:
------------
When assigning a reference to a previously undefined property of an
ArrayObject,
E_NOTICE is thrown on the assignment itself, and every time that
property is
accessed after that. Despite the "undefined index" complaints, the code
works as
expected â $b->test[] = "foo" successfully assigns "foo" to $a[0].
This issue does not occur with assignment by value â no notices are
displayed
(though the code no longer works as intended, as $a[0] remains
undefined). It also
does not occur if $b->test is initialized prior to the assignment by
reference
(e.g. adding a "$b->test = true" row before the assignment) â in this
case the
assignment by reference also works as intended, and does not emit
E_NOTICE.
Test script:
---------------
error_reporting(E_ALL & E_STRICT);
ini_set('display_errors', 1);
$a = array();
$b = new ArrayObject(array(), ArrayObject::ARRAY_AS_PROPS);
$b->test = &$a;
$b->test[] = "foo";
print($a[0]);
Expected result:
----------------
Script should run without notices.
Actual result:
--------------
Script throws "Undefined index: test" notices every time $b->test is
referenced,
even though everything works correctly otherwise.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=53277&edit=1