ID:               31683
 Comment by:       sebastian at famro dot de
 Reported By:      wagner at bonn dot edu
 Status:           Assigned
 Bug Type:         Zend Engine 2 problem
 Operating System: Gentoo Linux
 PHP Version:      5CVS-2005-01-25 (dev)
 Assigned To:      dmitry
 New Comment:

This bug concerns also the Function __set(): 
 
Reproduce code: 
--------------- 
<?php 
class testclass {  
  public function __set($name, $value) {  
    echo "$name = $value\n";  
    $name = "wrong"; 
    $value = 1; 
  }  
}  
 
$obj = new testclass();  
 
for ($i=1; $i <=3; $i++) {  
  $obj->correct = 0;  
} 
?> 
 
Actual result: 
-------------- 
correct = 0 
wrong = 0 
wrong = 0


Previous Comments:
------------------------------------------------------------------------

[2005-01-25 01:50:28] wagner at bonn dot edu

Description:
------------
Changing $name in __get($name) to e.g. "foo", will cause   
the next call of __get() to use "foo" as the name instead   
of the name of the member-Variable that was actually 
called. 
Only intercepted accesses to variables (e.g. 
$obj->doesnt_exist) seem to be affected, not direct calls 
to __get() (e.g. $obj->__get("whatever") ); 
  
Reproducible with PHP 5.0.3, PHP_5_0 CVS and CVS head (PHP  
5.1 dev).  

Reproduce code:
---------------
<?php 
class testclass { 
  public function __get($name) { 
    echo "$name \n"; 
    $name = "wrong";
  } 
} 

$obj = new testclass(); 

for ($i=1; $i <=3; $i++) { 
  $dummy = $obj->correct; 
}
?> 


Expected result:
----------------
correct   
correct  
correct  
 
The line 
$name = "wrong"; 
should have no effect. 

Actual result:
--------------
correct  
wrong  
wrong  
 


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


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

Reply via email to