How do the PHP equality (== double equals) and identity (=== triple equals) comparison operators differ?

前端 未结 11 2001
故里飘歌
故里飘歌 2020-11-22 16:52

What is the difference between == and === in PHP?

What would be some useful examples?


Additionally, how are these operators us

11条回答
  •  隐瞒了意图╮
    2020-11-22 17:19

    A picture is worth a thousand words:

    PHP Double Equals == equality chart:

    PHP Triple Equals === Equality chart:

    Source code to create these images:

    https://github.com/sentientmachine/php_equality_charts

    Guru Meditation

    Those who wish to keep their sanity, read no further because none of this will make any sense, except to say that this is how the insanity-fractal, of PHP was designed.

    1. NAN != NAN but NAN == true.

    2. == will convert left and right operands to numbers if left is a number. So 123 == "123foo", but "123" != "123foo"

    3. A hex string in quotes is occasionally a float, and will be surprise cast to float against your will, causing a runtime error.

    4. == is not transitive because "0"== 0, and 0 == "" but "0" != ""

    5. PHP Variables that have not been declared yet are false, even though PHP has a way to represent undefined variables, that feature is disabled with ==.

    6. "6" == " 6", "4.2" == "4.20", and "133" == "0133" but 133 != 0133. But "0x10" == "16" and "1e3" == "1000" exposing that surprise string conversion to octal will occur both without your instruction or consent, causing a runtime error.

    7. False == 0, "", [] and "0".

    8. If you add 1 to number and they are already holding their maximum value, they do not wrap around, instead they are cast to infinity.

    9. A fresh class is == to 1.

    10. False is the most dangerous value because False is == to most of the other variables, mostly defeating it's purpose.

    Hope:

    If you are using PHP, Thou shalt not use the double equals operator because if you use triple equals, the only edge cases to worry about are NAN and numbers so close to their datatype's maximum value, that they are cast to infinity. With double equals, anything can be surprise == to anything or, or can be surprise casted against your will and != to something of which it should obviously be equal.

    Anywhere you use == in PHP is a bad code smell because of the 85 bugs in it exposed by implicit casting rules that seem designed by millions of programmers programming by brownian motion.

提交回复
热议问题