|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2004-08-19 15:54 UTC] bd at avatartechnology dot com
Description:
------------
Ran into a situation where code that utilized the operator 'and' produced erroneous results.
$free_shipping = true;
$add_fee = 'Y';
$free_shipping = $free_shipping and $add_fee == 'N';
This was producing the result where $free_shipping was always true. Adding parenthesis makes no difference in result.
--------------
$free_shipping = true;
$residential_fee = 'Y';
$free_shipping = $free_shipping && $residential_fee == 'N';
This accurately produces the correct results.
--------------
According to the documentation on PHP website 'and' and '&&' should be used interchangably with same results.
Reproduce code:
---------------
$free_shipping = true;
$residential_fee = 'Y';
$free_shipping = $free_shipping and $residential_fee == 'N';
printf("free = %d",$free_shipping);
Expected result:
----------------
free = 0
Actual result:
--------------
free = 1
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Wed Dec 17 16:00:01 2025 UTC |
$free_shipping = true; $residential_fee = 'Y'; $free_shipping = $free_shipping and ($residential_fee == 'N'); printf("free = %d",$free_shipping); This code fails too. As stated in my previous comments priority of operators is not an issue. "and" is producing wrong results. Even if priority was an issue with the previous code example, the result should still be false. The 'and' operator is IGNORING conditionals after it, which is a PHP bug.Here is a more basic example. $true = true; $false = false; $result = $true and $false; printf("result = %d",$result); This should produce: "result = 0" This is actually producing: "result = 1"