Whoops, you're right. Classic 'C' mistake using = instead of ==. Never mind
:(

> 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
>> 

-- 
Randy Perry
sysTame
Mac Consulting/Sales

phn                 561.589.6449
mobile email        [EMAIL PROTECTED]



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to