THINKPHP5 volist标签循环不能设置循环变量为$i
  TEZNKK3IfmPf 2024年05月17日 26 0

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

控制器这样写

THINKPHP5 volist标签循环不能设置循环变量为

模板这样写

THINKPHP5 volist标签循环不能设置循环变量为

结果是

THINKPHP5 volist标签循环不能设置循环变量为

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

 THINKPHP5 volist标签循环不能设置循环变量为

THINKPHP5 volist标签循环不能设置循环变量为

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

THINKPHP5 volist标签循环不能设置循环变量为

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

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

找到了代码

<?php if(is_array($list) || $list instanceof \think\Collection || $list instanceof \think\Paginator): $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__循环出来的,所以可以直接简化为

THINKPHP5 volist标签循环不能设置循环变量为

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

THINKPHP5 volist标签循环不能设置循环变量为

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

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

THINKPHP5 volist标签循环不能设置循环变量为

果然解析后的代码如下

THINKPHP5 volist标签循环不能设置循环变量为

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

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

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年05月17日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年03月29日   77   0   0 标签js
  TEZNKK3IfmPf   2023年11月14日   55   0   0 标签html
  TEZNKK3IfmPf   2023年11月14日   22   0   0 标签html
  TEZNKK3IfmPf   2023年11月12日   21   0   0 标签xmlJSp
  TEZNKK3IfmPf   2023年11月14日   30   0   0 标签git
  TEZNKK3IfmPf   2023年11月14日   48   0   0 标签html
  TEZNKK3IfmPf   2023年11月14日   73   0   0 标签数据
  TEZNKK3IfmPf   2023年11月14日   77   0   0 标签html表单
TEZNKK3IfmPf