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