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

Reply via email to