PHP for循环作用域问题:如何在循环内部使用外层定义的变量
你碰到的这个警告和PHP作用域规则完全无关。
PHP采用的是函数级作用域,只要是在函数内部定义的变量,整个函数范围内(包括嵌套的for、if等代码块)都可以正常访问和修改,不会出现块级作用域隔离的问题,你现在的写法本身就已经可以正常在循环内修改$idx和$test的值了。
你看到的$idx is declared but not used是IDE或者静态代码检测工具抛出的提示,不是PHP运行时的错误。触发原因是你给变量赋值之后,在整个函数逻辑里没有对这个变量做任何后续使用——没有返回它、没有把它传入其他函数、也没有用它做任何业务逻辑处理,工具判断这个变量的赋值没有意义,才会给出这个警告。
你只要在函数里加上对该变量的使用逻辑,警告就会立刻消失,比如修改你的代码如下:
function removeFriend($friendsList, $friend) { $idx = null; for ($friendsList->rewind(); $friendsList->valid(); $friendsList->next()) { if($friendsList->current() === $friend){ $idx = $friendsList->key(); } } return $idx; // 新增返回$idx的逻辑,警告就会消失 }
通用示例修改后同样不会有警告:
function test() { $test = 0; for ($i = 0; $i < 10; $i++) { $test = 1; } echo $test; // 新增使用$test的逻辑即可 }
至于相同逻辑的JS代码不会报这个警告,只是因为你用的JS开发环境没有开启未使用变量的检测规则,如果你开启ESLint的no-unused-vars规则,同样的代码也会抛出完全一致的警告。
内容的提问来源于stack exchange,提问作者user14849955
相关产品推荐
相关产品推荐

