PHP for 循环中 ‘-->‘ 写法解释

新手上路,请多包涵

看到项目中的for循环条件中有-->的写法,之前没见过;有大神了解这是什么用法吗?(我理解是循环十次,把$retry值减少到0)望解析谢谢

for($retry=10;$retry-->0;){
            if(){
                continue;
            }
            break;
        }
阅读 2.5k
3 个回答

i-->0 (i--)>0 不要被酷炫的符号迷惑啦

for($retry=10;$retry-->0;){
            if(){
                continue;
            }
            break;
        }

等同于

for($retry=10;($retry--)>0;){
            if(){
                continue;
            }
            break;
        }

等同于

for($retry = 10; $retry >0 ; $retry--){
            if(){
                continue;
            }
            break;
        }

这样是不是可以理解了

你的理解有误
这实际上是两个语法的结合, 用括号表示即 ($a--) > 0

这个为什么能工作, 需要完全理解 for 循环的几个表达式的执行时刻.

for (expr1; expr2; expr3) 
    statement;

for 循环的这三个表达式.
expr1 是在整个循环开始前执行 (所以通常用作初始化).
expr2 是在每单个循环的开始前执行, 它应该可以被转换为一个布尔值, 如果为TRUE则继续, 如果为FALSE则跳出.
expr3则在每单个循环结束后执行.
并且实际上, 这三个 expr 都是可以省略的. for(;true;){...}while(true){...} 没有任何区别

用等效的 while 来解释上面的几个 expr 的话也就是这样 (下面代码中的 expr 和上面的 expr 都相同编号一一对应)

expr1;
while (expr2) {
    statement;
    expr3;
}

当然了, 强烈不建议这种炫技写法, 给团队成员和其它维护者增加毫无意义的理解成本.

把for循环的第二个条件和第三个条件合并了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题