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

 ID:               51174
 Comment by:       heis dot turtlemad at gmail dot com
 Reported by:      skrol29forum at gmail dot com
 Summary:          error "expected to be a reference" when $this
                   referenced in an array property
 Status:           Open
 Type:             Bug
 Package:          Scripting Engine problem
 Operating System: Win7
 PHP Version:      5.3

 New Comment:

Same failure running Php5.3.2 on FreeBSD8



david:~>php test.php

arg_array[0]  is the 

same instance than $this  <br>

prop=1 <br>

arg_array[0]  is the 

same instance than $this  <br>



Warning: Parameter 1 to f_test() expected to be a reference, value given
in /usr/home/david/test.php on line 15


Previous Comments:
------------------------------------------------------------------------
[2010-06-21 00:03:55] fel...@php.net

I can reproduce it.



array(1) {

  [0]=>

  &object(clsTest)#1 (2) {

    ["prop"]=>

    int(0)

    ["arg_array"]=>

    *RECURSION*

  }

}

prop=1 <br>

array(1) {

  [0]=>

  object(clsTest)#1 (2) {

    ["prop"]=>

    int(1)

    ["arg_array"]=>

    *RECURSION*

  }

}

PHP Warning:  Parameter 1 to f_test() expected to be a reference, value
given

------------------------------------------------------------------------
[2010-03-01 08:24:57] skrol29forum at gmail dot com

I've inverted "Expected result" and "Actual result".

------------------------------------------------------------------------
[2010-03-01 00:08:16] skrol29forum at gmail dot com

Description:
------------
When $this is stored by reference in a PHP array, itself stored in a
property, then function call_user_func_array() is able to recognize the
reference only if called in the same local context where $this is
referenced. In other words, the reference seems to be lost for
call_user_func_array().



The bug does not occur with PHP 5.2,

It does occur with both PHP 5.3.0 and PHP 5.3.1. Not yet tested with PHP
5.3.2



Note that if we use a global variable instead of a property, then the
bug does not occur.





Reproduce code:
---------------
<?php



function f_test(&$obj) {

        $obj->prop++;

        echo "prop=".$obj->prop." <br>\r\n";

}



class clsTest {

        public $prop = 0;

        public $arg_array = false;

        function meth() {

                if ($this->arg_array===false) $this->arg_array = array(&$this);

                echo 'arg_array[0] '.(($this->arg_array[0]===$this) ? ' is the 
same
instance' : ' is not the same instance').' than $this'."  <br>\r\n";

                call_user_func_array('f_test', $this->arg_array);

        }

}



$oTest = new clsTest;

$oTest->meth(); // OK

$oTest->meth(); // ERR



?>

Expected result:
----------------
arg_array[0] is the same instance than $this

prop=1

arg_array[0] is the same instance than $this



Warning: Parameter 1 to f_test() expected to be a reference, value given
in D:\www\bug.php on line 14

Actual result:
--------------
arg_array[0] is the same instance than $this

prop=1

arg_array[0] is the same instance than $this

prop=2


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



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

Reply via email to