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
相关产品推荐
相关产品推荐

