1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
--TEST--
Implicit float to int conversions should warn for literals
--FILE--
<?php
echo 'Bitwise ops:' . \PHP_EOL;
// 8 Warnings generated in total
$var = ~1.5;
var_dump($var);
$var = 1.5|3;
var_dump($var);
$var = 1.5&3;
var_dump($var);
$var = 1.5^3;
var_dump($var);
$var = 1.5 << 3;
var_dump($var);
$var = 1.5 >> 3;
var_dump($var);
$var = 3 << 1.5;
var_dump($var);
$var = 3 >> 1.5;
var_dump($var);
echo 'Modulo:' . \PHP_EOL;
// 2 warnings in total
$var = 6.5 % 2;
var_dump($var);
$var = 9 % 2.5;
var_dump($var);
echo 'Offset access:' . \PHP_EOL;
echo 'Arrays:' . \PHP_EOL;
// 2 warnings in total
$array = ['a', 'b', 'c'];
var_dump($array[1.5]);
$array[2.5] = 'z';
var_dump($array);
echo 'Strings:' . \PHP_EOL;
// 2 warnings in total
$string = 'php';
var_dump($string[1.5]);
$string[2.5] = 'z';
var_dump($string);
echo 'Function calls:' . \PHP_EOL;
function foo(int $a) {
return $a;
}
var_dump(foo(1.5));
var_dump(chr(60.5));
echo 'Function returns:' . \PHP_EOL;
function bar(): int {
return 3.5;
}
var_dump(bar());
echo 'Typed property assignment:' . \PHP_EOL;
class Test {
public int $a;
}
$instance = new Test();
$instance->a = 1.5;
var_dump($instance->a);
?>
--EXPECTF--
Bitwise ops:
Deprecated: Implicit conversion from float 1.5 to int loses precision in %s on line %d
int(-2)
Deprecated: Implicit conversion from float 1.5 to int loses precision in %s on line %d
int(3)
Deprecated: Implicit conversion from float 1.5 to int loses precision in %s on line %d
int(1)
Deprecated: Implicit conversion from float 1.5 to int loses precision in %s on line %d
int(2)
Deprecated: Implicit conversion from float 1.5 to int loses precision in %s on line %d
int(8)
Deprecated: Implicit conversion from float 1.5 to int loses precision in %s on line %d
int(0)
Deprecated: Implicit conversion from float 1.5 to int loses precision in %s on line %d
int(6)
Deprecated: Implicit conversion from float 1.5 to int loses precision in %s on line %d
int(1)
Modulo:
Deprecated: Implicit conversion from float 6.5 to int loses precision in %s on line %d
int(0)
Deprecated: Implicit conversion from float 2.5 to int loses precision in %s on line %d
int(1)
Offset access:
Arrays:
Deprecated: Implicit conversion from float 1.5 to int loses precision in %s on line %d
string(1) "b"
Deprecated: Implicit conversion from float 2.5 to int loses precision in %s on line %d
array(3) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "z"
}
Strings:
Warning: String offset cast occurred in %s on line %d
string(1) "h"
Warning: String offset cast occurred in %s on line %d
string(3) "phz"
Function calls:
Deprecated: Implicit conversion from float 1.5 to int loses precision in %s on line %d
int(1)
Deprecated: Implicit conversion from float 60.5 to int loses precision in %s on line %d
string(1) "<"
Function returns:
Deprecated: Implicit conversion from float 3.5 to int loses precision in %s on line %d
int(3)
Typed property assignment:
Deprecated: Implicit conversion from float 1.5 to int loses precision in %s on line %d
int(1)
|