最近打算升级到 PHP8 ,发现程序好多地方报 warning 了。官方搜索了一下,大概就是以前是 notice 升级了。
A number of notices have been converted into warnings:
Attempting to read an undefined variable. Attempting to read an undefined property. Attempting to read an undefined array key.
好多地方要进行变量判断。有点不想干了。v😂
太惨了。我代码好多地方用到 $_POST, $_GET。现在要好多地方都要用 $_GET ?? null 。非常不优雅了。
if($_GET['e'] == 1)
1
Rache1 2022-05-09 13:32:16 +08:00 1
😄 8.2 还通过了一个新的 RFC ,遗弃了对象的动态属性,还是趁早改代码吧。
PHP: rfc:deprecate_dynamic_properties https://wiki.php.net/rfc/deprecate_dynamic_properties |
2
Felldeadbird OP @Rache1 哎呀,这改动有点激进啊。
今天一个早上在改这些警告判断。找到一个和我差不多痛苦的人 https://stackoverflow.com/questions/71025115/dealing-with-php-8-1-warning-for-undefined-array-key |
3
Rache1 2022-05-09 14:05:53 +08:00
|
4
leo108 2022-05-09 14:08:49 +08:00 1
phpcs & phpstan 从根源上解君愁
|
5
encro 2022-05-09 14:39:21 +08:00
聪明的你,
将 warning 错误再禁止呗, 就如你当初禁止 notice 错误一样。 |
6
lslqtz 2022-05-09 14:43:10 +08:00
你就不能再加一个 isset 么……
|
7
encro 2022-05-09 14:43:52 +08:00
或者,
你可以学习下正则, 批量查找替换下。 replace `if($_GET['e'] == 1)` to `if(isset($_GET['e']) && $_GET['e'] == 1)` 大概 10 年前,就不用楼主这种写法了。。。,开发模式开启 notice 错误,是标配。 |
8
mrgeneral 2022-05-09 14:45:07 +08:00 1
所以暂时将你眼睛闭了起来
error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING display_errors = Off |
9
Felldeadbird OP |
10
encro 2022-05-09 16:12:05 +08:00
从 5.3 时代开始,
我就是没有启用 NOTICE 提示的库不用, 开发模式必须开启 Notice 错误提示, 这样能少很多 debug 时间。 |
11
msg7086 2022-05-10 01:02:52 +08:00 via Android
我记得我十五年前写的 PHP 代码就已经全用 isset 检测了。是我穿越了吗?
|
12
zengzizhao 2022-05-18 12:06:06 +08:00
$_GET ?? null
这样不优雅? 有一些业务判断,加多一个 isset 太长了 代码逻辑正确是首要的,加一个 isset 太长了,这也能当理由? |