Predefined Constants
The constants below are always available as part of the PHP core.
Constant | Value | Description | Availability |
---|---|---|---|
M_PI |
3.14159265358979323846 | Pi | |
M_E |
2.7182818284590452354 | e | |
M_LOG2E |
1.4426950408889634074 | log_2 e | |
M_LOG10E |
0.43429448190325182765 | log_10 e | |
M_LN2 |
0.69314718055994530942 | log_e 2 | |
M_LN10 |
2.30258509299404568402 | log_e 10 | |
M_PI_2 |
1.57079632679489661923 | pi/2 | |
M_PI_4 |
0.78539816339744830962 | pi/4 | |
M_1_PI |
0.31830988618379067154 | 1/pi | |
M_2_PI |
0.63661977236758134308 | 2/pi | |
M_SQRTPI |
1.77245385090551602729 | sqrt(pi) | PHP 5.2.0 |
M_2_SQRTPI |
1.12837916709551257390 | 2/sqrt(pi) | |
M_SQRT2 |
1.41421356237309504880 | sqrt(2) | |
M_SQRT3 |
1.73205080756887729352 | sqrt(3) | PHP 5.2.0 |
M_SQRT1_2 |
0.70710678118654752440 | 1/sqrt(2) | |
M_LNPI |
1.14472988584940017414 | log_e(pi) | PHP 5.2.0 |
M_EULER |
0.57721566490153286061 | Euler constant | PHP 5.2.0 |
PHP_ROUND_HALF_UP |
1 | Round halves up | PHP 5.3.0 |
PHP_ROUND_HALF_DOWN |
2 | Round halves down | PHP 5.3.0 |
PHP_ROUND_HALF_EVEN |
3 | Round halves to even numbers | PHP 5.3.0 |
PHP_ROUND_HALF_ODD |
4 | Round halves to odd numbers | PHP 5.3.0 |
NAN |
NAN (as a float) | Not A Number | |
INF |
INF (as a float) | The infinite |
All constants without a labeled PHP version above are available starting with PHP 4.0.0.
Коментарии
There are also the predefined PHP_INT_MAX and PHP_INT_SIZE constants, that describe the range of possible integer values.
I just learnt of INF today and found out that it can be used in comparisons:
echo 5000 < INF ? 'yes' : 'no'; // outputs 'yes'
echo INF < INF ? 'yes' : 'no'; // outputs 'no'
echo INF <= INF ? 'yes' : 'no'; // outputs 'yes'
echo INF == INF ? 'yes' : 'no'; // outputs 'yes'
You can also take its negative:
echo -INF < -5000 ? 'yes' : 'no'; // outputs 'yes'
Division by INF is allowed:
echo 1/INF; // outputs '0'
Although INF can be used for comparison against normal numbers and as a directed number, and behaves as reciprocal of zero, it is not like limit INF tends to infinity. These operations do not work:
<?php
var_dump(INF / INF); // float(NAN)
var_dump(INF - INF); // float(NAN)
?>
However, it works with arc-tangent:
<?php
var_dump(atan(INF) / M_PI); // float(0.5)
var_dump(atan2(INF, INF) / M_PI); // float(0.25)
var_dump(atan2(1, INF) / M_PI); // float(0)
?>
Another observation on INF.
Division by zero results in INF:
<?php
var_dump(1/0); // float(INF)
?>
BUT a 'Division by zero' warning is issued.
From PHP 7.2.0, the PHP_FLOAT_* constants are provided to describe the properties of floating point numbers that can be stored; PHP_FLOAT_MAX, for example, is analogous to PHP_INT_MAX and represents the largest possible floating-point number.
Caution when using variables with the value NAN (or directly NAN, which would not be logical) if the value is converted in any form (integer, string or other non-float format)!
In that case, NAN is converted to 0. (e.g. as an index in an array, argument of a method that takes it as a non-float parameter, etc.). This bug has been reported several times, but is still present in the current version PHP 7.3.15.
Example 1:
$array = [0 => 'zero', 1 => 'one', 2 => 'two'];
$index = NAN;
echo $array[$index]; // echo 'zero' and not as axcepted throws an exception or at least a warning 'undefined offset NAN ...'
Example 2:
function f((int) $p) { return $p; }
echo f(NAN); // echo 0 because the argument (NAN) has been converted to integer (0)
It would have to be checked in both cases explicitly for is_nan():
1: if(is_nan($index)){
<throw Exception>
}else{
echo $array[$index];
};
2: function f($p){ // without converting!!!
if(is_nan($p)){
<throw Exception>
}else{
return (int)$p; // actually a correct conversion to Integer would have to be checked because the parser does not check this here.
};
}
The constants
PHP_ROUND_HALF_UP
PHP_ROUND_HALF_DOWN
PHP_ROUND_HALF_EVEN
PHP_ROUND_HALF_ODD
are constants intended to be used as the 3rd parameter in the math function round()
https://www.php.net/manual/en/function.round