|   | php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login | 
| 
  [2005-01-25 01:50 UTC] 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  
 
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits             | |||||||||||||||||||||||||||||||||||||
|  Copyright © 2001-2025 The PHP Group All rights reserved. | Last updated: Fri Oct 31 07:00:01 2025 UTC | 
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