V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Felldeadbird
V2EX  ›  PHP

PHP8 大家怎样修复 notice 变成 warning 的错误?

  •  
  •   Felldeadbird · 2022-05-09 13:20:21 +08:00 · 2082 次点击
    这是一个创建于 716 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近打算升级到 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😂

    第 1 条附言  ·  2022-05-09 14:35:34 +08:00

    太惨了。我代码好多地方用到 $_POST, $_GET。现在要好多地方都要用 $_GET ?? null 。非常不优雅了。

    
     if($_GET['e'] == 1)
    
    
    12 条回复    2022-05-18 12:06:06 +08:00
    Rache1
        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
    Felldeadbird
        2
    Felldeadbird  
    OP
       2022-05-09 13:55:25 +08:00
    @Rache1 哎呀,这改动有点激进啊。

    今天一个早上在改这些警告判断。找到一个和我差不多痛苦的人 https://stackoverflow.com/questions/71025115/dealing-with-php-8-1-warning-for-undefined-array-key
    Rache1
        3
    Rache1  
       2022-05-09 14:05:53 +08:00
    leo108
        4
    leo108  
       2022-05-09 14:08:49 +08:00   ❤️ 1
    phpcs & phpstan 从根源上解君愁
    encro
        5
    encro  
       2022-05-09 14:39:21 +08:00
    聪明的你,
    将 warning 错误再禁止呗,
    就如你当初禁止 notice 错误一样。
    lslqtz
        6
    lslqtz  
       2022-05-09 14:43:10 +08:00
    你就不能再加一个 isset 么……
    encro
        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 错误,是标配。
    mrgeneral
        8
    mrgeneral  
       2022-05-09 14:45:07 +08:00   ❤️ 1
    所以暂时将你眼睛闭了起来

    error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING

    display_errors = Off
    Felldeadbird
        9
    Felldeadbird  
    OP
       2022-05-09 15:10:10 +08:00
    @lslqtz 有一些业务判断,加多一个 isset 太长了。 例如 if($a){} 这样我就可以知道$a 存在就执行里面的方法。


    @encro
    @mrgeneral 禁用 notice 是因为 这个项目写的时候,5.X 时代大部分都这样操作。到了 PHP7 也没太多怎么样变化。最近要准备升级到 PHP8 。。。。
    encro
        10
    encro  
       2022-05-09 16:12:05 +08:00
    从 5.3 时代开始,
    我就是没有启用 NOTICE 提示的库不用,
    开发模式必须开启 Notice 错误提示,
    这样能少很多 debug 时间。
    msg7086
        11
    msg7086  
       2022-05-10 01:02:52 +08:00 via Android
    我记得我十五年前写的 PHP 代码就已经全用 isset 检测了。是我穿越了吗?
    zengzizhao
        12
    zengzizhao  
       2022-05-18 12:06:06 +08:00
    $_GET ?? null
    这样不优雅?

    有一些业务判断,加多一个 isset 太长了
    代码逻辑正确是首要的,加一个 isset 太长了,这也能当理由?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3456 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:04 · PVG 19:04 · LAX 04:04 · JFK 07:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.