
最近打算升级到 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 May 9, 2022 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 May 9, 2022 |
4 leo108 May 9, 2022 phpcs & phpstan 从根源上解君愁 |
5 encro May 9, 2022 聪明的你, 将 warning 错误再禁止呗, 就如你当初禁止 notice 错误一样。 |
6 lslqtz May 9, 2022 你就不能再加一个 isset 么…… |
7 encro May 9, 2022 或者, 你可以学习下正则, 批量查找替换下。 replace `if($_GET['e'] == 1)` to `if(isset($_GET['e']) && $_GET['e'] == 1)` 大概 10 年前,就不用楼主这种写法了。。。,开发模式开启 notice 错误,是标配。 |
8 mrgeneral May 9, 2022 所以暂时将你眼睛闭了起来 error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING display_errors = Off |
9 Felldeadbird OP |
10 encro May 9, 2022 从 5.3 时代开始, 我就是没有启用 NOTICE 提示的库不用, 开发模式必须开启 Notice 错误提示, 这样能少很多 debug 时间。 |
11 msg7086 May 10, 2022 via Android 我记得我十五年前写的 PHP 代码就已经全用 isset 检测了。是我穿越了吗? |
12 zengzizhao May 18, 2022 $_GET ?? null 这样不优雅? 有一些业务判断,加多一个 isset 太长了 代码逻辑正确是首要的,加一个 isset 太长了,这也能当理由? |