zoukankan      html  css  js  c++  java
  • THINKPHP5 volist标签循环不能设置循环变量为$i

    在thinkphp5的volist标签中不要用$i作为id,举个简单例子

    控制器这样写

    模板这样写

    结果是

    这很令人费解啊。然后换一个循环变量看看

     

    循环正常了,看来这个id这里设置循环变量的时候 不能设置为i。翻看手册 发现有一条

    这说明了key属性默认是i,这样一来冲突了,出现了覆盖,就出现了奇怪现象,最后一个单词总是比实际的后移了一位ascii码 比如 php变为了phq,mysql变为了mysqm,linux变为了linuy,都是差一位,这真是一个奇怪的现象啊

     然后我看了一下框架解析标签后的代码,在runtime/tmp里面

    找到了代码

    <?php if(is_array($list) || $list instanceof 	hinkCollection || $list instanceof 	hinkPaginator): $i = 0; $__LIST__ = $list;if( count($__LIST__)==0 ) : echo "" ;else: foreach($__LIST__ as $key=>$i): $mod = ($i % 2 );++$i;?>
    <?php echo $i; ?><br/>
    <?php endforeach; endif; else: echo "" ;endif; ?>

    这代码不太好理解,我删掉了部分,得到如下

    <?php if(is_array($list): $i = 0; $__LIST__ = $list;if( count($__LIST__)==0 ) : echo "" ;else: foreach($__LIST__ as $key=>$i): $mod = ($i % 2 );++$i;?>
    <?php echo $i; ?><br/>
    <?php endforeach; endif; else: echo "" ;endif; ?>

    这是用的PHP的原始的foreach和if的标签,我更改一下这个标签就变为

    <?php 
    if(is_array($list)
    {
        $i = 0; 
        $__LIST__ = $list;
        if( count($__LIST__)==0 )
        {
            echo "" ;
        }else{
            foreach($__LIST__ as $key=>$i)
            {
                $mod = ($i % 2 );++$i;
                echo $i;
                ?>
                <br/>
            <?php 
            } 
        }else
        { 
            echo "" ;
        }
    }
    ?>

    我们可以看到,主要是foreach循环这一步,简化一下,由于 $list赋值给$__LIST__然后用$__LIST__循环出来的,所以可以直接简化为

    从这里我们看到了,循环之后 $mod几乎没起到什么作用,然后就++$i然后输出$i,我们直接做测试看看

    果然我们复现了问题,其实就是每个循环的游标变量都自增了一下,然后被输出,这就是为什么 php变为了phq,mysql变为了mysqm,linux变为了linuy,原来如此啊,看来我们不能大意,不要随便给volist标签中的id赋值为i啊!

    现在我们可以指明这个游标变量的名字看看

    果然解析后的代码如下

    看到了吧,这样就不会游标元素值就不会自增了,而是索引自增。

    这回是彻底搞明白了,哈哈哈

  • 相关阅读:
    剑指offer[30]——连续子数组的最大和
    移动端数据爬取
    Scrapy框架基础应用和持久化存储
    爬虫的验证码处理,图片懒加载,selenium和 PhantomJS,requests模块的session,线程池
    爬虫之数据解析(bs4,Xpath)
    爬虫之jupyter的使用,requests模块,正则表达式
    git的分支,多人协作,标签管理
    git 的基础
    利用python操作excel表
    nginx基于uwsgi部署Django
  • 原文地址:https://www.cnblogs.com/lizhaoyao/p/10071304.html
Copyright © 2011-2022 走看看