ID: 47154
Comment by: onerax at gmail dot com
Reported By: onerax at gmail dot com
Status: Open
Bug Type: Scripting Engine problem
Operating System: Windows
PHP Version: 6CVS-2009-01-19 (snap)
New Comment:
I've found a workaround for this problem.
Using extract($Data) I was able to assign $User->Password to the
resulting $Password variable and get the correct value in place.
Previous Comments:
------------------------------------------------------------------------
[2009-01-20 23:12:05] onerax at gmail dot com
It also seems that if I set the values in the object manually - in
the above example, $User->Password = 'notest', then the property is
set. If I do the same to the array $Data, $Data['Password'] =
'notest', It does not set the existing Password index, rather it
creates a second Password index, which is shown in print_r below.
Array ( [EntityId] => USER_4974b612242741.58553835 [Password] => test
[LastLogin] => [LastIp] => [Name] => test [Description] => [Updated]
=> [Created] => 2009-01-19 17:19:14 [Parent] => [Owner] => [UserId]
=> USER_4974b612242741.58553835 [FirstName] => [MiddleName] =>
[LastName] => [Avatar] => [Alias] => [Gender] => [Signature] =>
[Password] => notest ) 111Page Generation Time:: 0.09224 seconds
A single array with two "Password" entries...strange, yes? =)
------------------------------------------------------------------------
[2009-01-20 16:51:28] onerax at gmail dot com
Here's a section of the actual code piece, and the output of all
involved variables after the routine.
CODE::
<?php
Namespace xBB\Database;
require_once('./Core/Database/EntityQueries.class.php');
class UserQueries extends EntityQueries
{
public function Fill($User, Array &$Data)
{
parent::Fill($User, $Data);
$User->Password = $Data['Password'];
$User->LastLogin = $Data['LastLogin'];
$User->LastIp = $Data['LastIp'];
require_once('./Core/Entities/Profile.class.php');
$User->Profile = new
\xBB\Entities\Profile();
$User->Profile->UserId = $Data['EntityId'];
$this->Database->Profiles->Fill($User->Profile,
$Data);
if(sizeof($Data)>1){
die(print_r($User).print_r($User-
>Profile).print_r($Data));
}
}
...
OUTPUT::
xBB\Entities\User Object ( [Password] => [LastLogin] => [Profile] =>
xBB\Entities\Profile Object ( [UserId] => [FirstName] => [MiddleName]
=> [LastName] => [Avatar] => [Alias] => [Gender] => [Signature] => )
[LastIp] => [EntityId] => [Name] => [Description] => [Updated] =>
[Created] => [Parent] => [Owner] => ) xBB\Entities\Profile Object (
[UserId] => [FirstName] => [MiddleName] => [LastName] => [Avatar] =>
[Alias] => [Gender] => [Signature] => ) Array ( [EntityId] =>
USER_4974b612242741.58553835 [Password] => test [LastLogin] =>
[LastIp] => [Name] => test [Description] => [Updated] => [Created] =>
2009-01-19 17:19:14 [Parent] => [Owner] => [UserId] =>
USER_4974b612242741.58553835 [FirstName] => [MiddleName] =>
[LastName] => [Avatar] => [Alias] => [Gender] => [Signature] => )
111Page Generation Time:: 0.093775 seconds
------------------------------------------------------------------------
[2009-01-19 21:16:35] onerax at gmail dot com
Description:
------------
After setting object properties on one line, object is still empty on
the next. Inheritance, multiple namespaces, and passing arrays by
reference are involved.
Reproduce code:
---------------
http://helios-emu.org/arraytest.txt
keep in mind this is not the actual code, and does not reproduce the
problem by itself. To reproduce the problem you have to separate each
class into a separate file and separate them out into two separate
namespaces. I have the original code that I uncovered this in and can
e-mail it upon a developer's request, but I will not make it public.
Expected result:
----------------
The object in which the properties are set contain data.
Actual result:
--------------
The object in which the properties are set do not contain data.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=47154&edit=1