Re: Boolean type forced on string assignment inside if statement

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2013/1/3 Marc Guay <marc.guay@xxxxxxxxx>:
> I received the message below addressed only to me, but I believe the
> group could benefit.  It looks like the single pipe is a bitwise
> operator so you will get an integer as a result (and probably other
> weird things to discover when using it on non-numbers).
>
> http://php.net/manual/en/language.operators.bitwise.php
>
>
> ---------- Forwarded message ----------
> From: Volmar Machado <qi.volmar@xxxxxxxxx>
> Date: 3 January 2013 12:42
> Subject: Re:  Boolean type forced on string assignment inside if statement
> To: Marc Guay <marc.guay@xxxxxxxxx>
>
>
> My results in a simple test:
>
> <?php
>  $a = true;
>  $b = false; // either null, or 0
>  echo ('($a | $b))' . ($a | $b) . '<br>'); //1
>  echo ('($a || $b))' . ($a || $b) . '<br>'); //1
>  echo ('($b | $a)' . ($b | $a) . '<br>'); //1
>  echo ('($b || $a)' . ($b || $a) . '<br>'); //1
>  echo ('($a | $a)'. ($a | $a) . '<br>'); //1
>  echo ('($a || $a)' . ($a || $a) . '<br>'); //1
>  echo ('($b | $b)' . ($b | $b) . '<br>'); //0
>  echo ('($b || $b)' . ($b || $b) . '<br>'); //false(outputs nothing)
> ?>

The basic difference for another test, where conditions are both true are :

<?php
 $a = 4;
 $b = 3;
 echo ('($a | $b))' . ($a | $b) . '<br>'); //7
 echo ('($a || $b))' . ($a || $b) . '<br>'); //1
 echo ('($b | $a)' . ($b | $a) . '<br>'); //7
 echo ('($b || $a)' . ($b || $a) . '<br>'); //1
 echo ('($a | $a)'. ($a | $a) . '<br>'); //4
 echo ('($a || $a)' . ($a || $a) . '<br>'); //1
 echo ('($b | $b)' . ($b | $b) . '<br>'); //3
 echo ('($b || $b)' . ($b || $b) . '<br>'); //1

 echo ('($a & $b))' . ($a & $b) . '<br>'); //0
<-------------------------------------------
 echo ('($a && $b))' . ($a && $b) . '<br>'); //1
 echo ('($b & $a)' . ($b & $a) . '<br>'); //0
<-------------------------------------------
 echo ('($b && $a)' . ($b && $a) . '<br>'); //1
 echo ('($a & $a)'. ($a & $a) . '<br>'); //4
 echo ('($a && $a)' . ($a && $a) . '<br>'); //1
 echo ('($b & $b)' . ($b & $b) . '<br>'); //3
 echo ('($b && $b)' . ($b && $b) . '<br>'); //1
?>

<?php
 $a = 2;
 $b = 3;
 echo ('($a | $b))' . ($a | $b) . '<br>'); //3
 echo ('($a || $b))' . ($a || $b) . '<br>'); //1
 echo ('($b | $a)' . ($b | $a) . '<br>'); //3
 echo ('($b || $a)' . ($b || $a) . '<br>'); //1
 echo ('($a | $a)'. ($a | $a) . '<br>'); //2
 echo ('($a || $a)' . ($a || $a) . '<br>'); //1
 echo ('($b | $b)' . ($b | $b) . '<br>'); //3
 echo ('($b || $b)' . ($b || $b) . '<br>'); //1

 echo ('($a & $b))' . ($a & $b) . '<br>'); //2 <----------------------------
 echo ('($a && $b))' . ($a && $b) . '<br>'); //1
 echo ('($b & $a)' . ($b & $a) . '<br>'); //2 <-----------------------------
 echo ('($b && $a)' . ($b && $a) . '<br>'); //1
 echo ('($a & $a)'. ($a & $a) . '<br>'); //2
 echo ('($a && $a)' . ($a && $a) . '<br>'); //1
 echo ('($b & $b)' . ($b & $b) . '<br>'); //3
 echo ('($b && $b)' . ($b && $b) . '<br>'); //1
?>

When the one of the operators were 2, the cases with "<------------"
returns 2 otherwise returns 0 (Or 1 when any operator is 1). And if
the operators are 1 and 2, return 0 too. Its curious for me.

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



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux