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

 ID:                 53394
 Comment by:         public at grik dot net
 Reported by:        public at grik dot net
 Summary:            ARRAY_AS_PROPS flag is ignored when used with
                     PDOStatement::fetchObject
 Status:             Open
 Type:               Bug
 Package:            SPL related
 PHP Version:        5.3.3
 Block user comment: N
 Private report:     N

 New Comment:

I was hinted that PDO sets the fields before calling a constructor.

It makes everything clear.



parent::__construct($array,ArrayObject::ARRAY_AS_PROPS);

is called after setting object fields, and they don't get processed by
ArrayObject::offsetSet.

ArrayObject::оffsetGet after changing mode to ARRAY_AS_PROPS doesn't
see the fields set by the PDO hack.



оffsetGet can process existing fields after changing the mode, I
suppose.


Previous Comments:
------------------------------------------------------------------------
[2010-11-24 04:13:05] public at grik dot net

Description:
------------
If the object is created and filled by PDOStatement::fetchObject, the
ArrayObject::ARRAY_AS_PROPS is ignored.



Seems like PDO sets the fields values directly around ArrayObject magic
setters, and breaks the ArrayObject native behaviour.

Test script:
---------------
class ArraySlice extends ArrayObject{

    function __construct(array $array=array()){

        parent::__construct($array,ArrayObject::ARRAY_AS_PROPS);

    }

}

$PDO = new PDO($dsn, $user, $password);

$a = $PDO->query('select id from links')->fetchObject('ArraySlice');

echo $a->id; //works

echo $a['id'];//Notice occured ... Undefined index:  id

Expected result:
----------------
value of the id field

Actual result:
--------------
Notice 


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



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

Reply via email to