On Mon, 2002-03-11 at 18:51, Randall Perry wrote: > According to the PHP 4 docs all variables are global unless within a > function. I've got the following test code which should output 2, but > outputs 1. The while loop creates it's own class object (which seems strange > since it isn't explicitly instantiated by my code; I would think it would > cause errors).
Actually, on PHP 4.2.0-dev, I get a parse error on the 'global $o-test;' line (you can't globalize an object attribute). If I remove that line, the code does indeed produce '$o-test = 1;'. That's because the loop never executes. Consider this change: while ($y = 0) { echo "In the loop.\n"; $o->test = 2; $y = 1; } When executed, 'In the loop' is never printed. This is because the loop never executes--because the while() condition is wrong. The '=' should be a '==' or '==='. What's happening at the moment is that the while() condition '$y = 0' is assigning 0 to $y, not comparing 0 to $y. The overall value of that expression, then, is 0--which evaluates to false. So the while loop never runs. If I change the '=' to '==', I get the correct output: Notice: Undefined variable: y in /home/torben/public_html/phptest/__phplist.html on line 27 In the loop. $o->test = 2 The notice is easily corrected by initializing $y before testing its value. The following should work for you: <?php error_reporting(E_ALL); class Ccust_data { function Cform_data() { $this->test = ""; } } $o = new Ccust_data(); $o->test = 1; $y = 0; while ($y == 0) { echo "In the loop.\n"; $o->test = 2; $y = 1; } echo "\$o->test = $o->test\n"; ?> What does this code do for you? Torben > The reason I created an object for my variable (actually, I started testing > with regular strings) is that I've had similar scoping problems in perl, > where variables got out of scope within loops (or even if statements). In > perl, declaring an object outside these structures will protect it's scope. > Not so in PHP I see. > > Can anyone explain this behavior? Do I have to create functions that return > values every time I need a loop that modifies a variable? > > <?php > > class Ccust_data { > function Cform_data() { > $this->test = ""; > } > } > > $o = new Ccust_data(); > $o->test = 1; > > while ($y = 0) { > global $o->test; > $o->test = 2; > $y = 1; > > } > > echo "\$o->test = $o->test\n"; > > ?> > -- > Randy Perry > sysTame > Mac Consulting/Sales > -- Torben Wilson <[EMAIL PROTECTED]> http://www.thebuttlesschaps.com http://www.hybrid17.com http://www.inflatableeye.com +1.604.709.0506 -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php