|
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 GroupAll rights reserved. |
Last updated: Fri Nov 07 11: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