Re: Boolean type forced on string assignment inside if statement

From: Date: Thu, 03 Jan 2013 18:11:35 +0000
Subject: Re: Boolean type forced on string assignment inside if statement
References: 1 2 3 4 5 6 7 8 9 10  Groups: php.general 
Request: Send a blank email to php-general+get-320016@lists.php.net to get a copy of this message
2013/1/3 Marc Guay <marc.guay@gmail.com>: > 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@gmail.com> > Date: 3 January 2013 12:42 > Subject: Re: [PHP] Boolean type forced on string assignment inside if statement > To: Marc Guay <marc.guay@gmail.com> > > > 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.

« previous php.general (#320016) next »