You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP代码中++$i触发布尔值自增警告的原因及解决方法

PHP代码警告问题:Increment on type bool has no effect

代码片段

$i = 0;
$extra_small_header_field_values = array();
while ($i < $i_len && $i !== false) {
    /* get argument */
    $read = trim(substr($read,$i));
    $i_len = strlen($read);
    $i = strpos($read,' ');
    $arg = substr($read,0,$i);
    ++$i;

问题描述

上述代码中++$i;行触发警告:Increment on type bool has no effect。疑问是:明明一开始把$i当作整数处理,为什么它会被视为布尔类型?该如何正确解决?


原因分析

问题出在$i = strpos($read,' ');这一行:

  • PHP的strpos()函数在目标字符串中找不到指定字符(这里是空格)时,会返回布尔值false,而非整数。
  • 当循环执行到某一轮时,如果$read里已经没有空格了,strpos就会返回false,此时$i的类型直接从整数变成了布尔值false。
  • 后续执行++$i时,对布尔值做自增操作既没有实际意义,也会触发警告。

解决方法

核心思路是先判断strpos的返回值,确保只有找到空格($i为整数)时才执行后续操作,否则退出循环:

修改后的代码示例:

$i = 0;
$extra_small_header_field_values = array();
while ($i < $i_len && $i !== false) {
    /* get argument */
    $read = trim(substr($read,$i));
    $i_len = strlen($read);
    $i = strpos($read,' ');
    
    // 找不到空格时,处理剩余内容并退出循环
    if ($i === false) {
        if ($read !== '') {
            $arg = $read;
            $extra_small_header_field_values[] = $arg;
        }
        break;
    }
    
    $arg = substr($read,0,$i);
    $extra_small_header_field_values[] = $arg;
    ++$i;
}

关键修改点:

  • 在给$arg赋值和自增$i前,先判断$i === false,避免对布尔值执行无效操作。
  • 补充了将解析出的$arg存入数组的逻辑(原代码定义了数组但未使用,应为遗漏)。

内容的提问来源于stack exchange,提问作者James B. Byrne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 21:22:08