You can define a new constant with the name NULL with define("NULL","FOO");.But you must use the function constant("NULL"); to get it's value.NULL without the function call to the constant() function will still retrieve the special type NULL value.
= NULL) && ((bool)$a == NULL)It's "0" and it works because casting string "0" to boolean gives FALSE (and it's the only non empty string, that works this way). Instead always use \NULL, \FALSE, and \TRUE when comparing.
Otherwise it may lead to application failures and potential security issues where certain checks could be effectively disabled.
A simple example to demonstrate the behavior: isset($var) is FALSE empty($var) is TRUE is_null($var) is TRUE isset($novar) is FALSE empty($novar) is TRUE is_null($novar) gives an Undefined variable error $var IS in the symbol table (from get_defined_vars()) $var CAN be used as an argument or an expression. isset($var) intead of is_null($var) and then set $var = NULL if the variable needs to be used later to guarantee that $var is a valid variable with a NULL value instead of being undefined.
Integral strings that overflow into floating point numbers will no longer be considered equal.] Be wary of string-comparison where both strings might be interpreted as numbers. Both strings are getting converted to floats, then losing precision, then becoming equal :-( Using "===" or making either of the strings non-numeric will prevent this.
Eg: $x="123456789012345678901234567890"; $y="123456789012345678900000000000"; echo ($x==$y)? [This is on a 32-bit machine, on a 64-bit, you will have to make the strings longer to see the effect] The way PHP handles comparisons when multiple types are concerned is quite confusing.