классы и call_user_func()

alpes

Весь мир на ладони
классы и call_user_func()

Объясните, с чем связана такая лажа:
PHP:
# имеем такой простенький скрипт
class test
{
 var $x='';
 function a() {echo "A"; $this->x='B';}
 function b() {call_user_func(array($this,'a'));}
}
$my=new test;
$my->b();
echo $my->x;
на выходе почемуто имеем только A, вместо ожидаемого AB
Почему нет присваивания $this->x='B' ?!

PHP Version 4.3.10
Apache 2.0 Handler
FreeBSD 5.2.1
 

svetasmirnova

маленький монстрик
Потому что $this передаётся по значению (в 4-ой версии), а не по ссылке
 

alpes

Весь мир на ладони
т.е. другими словами при вызве функции a() через call_user_func для работы данной функции создается новый объект test ?

как более правильно следует поступить для получения желаемого результата, вариант передачи ссылки в качестве параметра?
PHP:
class test
{
   var $x='';
   function a(&$l) {echo "A"; $this->x=&$l; $this->x='B';}
   function b() {call_user_func(array($this,'a'),&$this->x);}
}
$my=new test;
$my->b();
echo $my->x;
 

svetasmirnova

маленький монстрик
>т.е. другими словами при вызве функции a() через call_user_func для работы данной функции создается новый объект test ?
да

>как более правильно следует поступить для получения желаемого результата, вариант передачи ссылки в качестве параметра?
PHP:
call_user_func(array(&$this,'a'));
 
Сверху