[snip]
> 
> But why does the ($r=!$r) ternary condition work?. (I understand
> that it DOES but not WHY.)

Because he's rotating between boolean values.

    $r = true;
    $r = !$r;    // Now $r is false; 
    $r = !$r;    // Now $r is true;
    $r = !$r;    // Now $r is false; 
    $r = !$r;    // Now $r is true;
    $r = !$r;    // Now $r is false; 
    $r = !$r;    // Now $r is true;
    $r = !$r;    // Now $r is false; 
    $r = !$r;    // Now $r is true;
    ...
[/snip]

We just did that proof in the office as well. With a little echoing you
will see that when $r is TRUE it is set to 1, when it is false it is set
to NULL.

But it still should not work logically because you are performing an
assignment in the IF (it doesn't have to be ternary to work, that is
just elegant).

<?php
echo "<pre>";
echo ($r = !$r)?"Yes\n":"No\n";
echo $r."\n";
echo ($r = !$r)?"Yes":"No";
echo $r."\n";

if($r = !$r){
        echo "Yes\n";
}else{
        echo "No\n";
}
echo $r."\n";


if($r = !$r){
        echo "Yes\n";
}else{
        echo "No\n";
}
echo $r."\n";
echo "</pre>";
?>

Returns
Yes
1
No
Yes
1
No
Yes
1
No
Yes
1
No

It looks like PHP has an "unintentional feature". Doing this; if($r =
!$r) should always return TRUE because it is an assignment. I don't know
if I would rely on this.

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

Reply via email to