Laravel-foreach局部变量正在覆盖全局变量

时间:2018-09-23 19:20:55

标签: php laravel-5 laravel-blade

今天,我面临一个非常奇怪的问题。 我有一个控制器,将从该控制器向视图sections threadthreads发送三个变量。 在我看来,我正在使用foreach循环遍历所有部分,如下所示:

@foreach($sections as $i => $section)

并且对于每个部分,我都将创建一个div并给出如下所示的ID:

id="{{ $thread->slug }}-{{ $section->slug }}

现在在这个div中,我正在遍历所有这样的线程:

@foreach($threads as $thread)

并为每个线程创建div。 现在的问题是,当线程循环完成存储在局部变量线程中的线程中的最后一项时,将覆盖从视图发送的线程变量。 现在,我知道要解决此问题,我可以将foreach循环中的局部变量重命名为其他变量,但是我的问题是为什么会这样?为什么这个局部变量会覆盖我的全局变量?

这是我的控制人:

    public function show($slug)
    {
        return view('thread.show')
            ->with('sections', Section::all())
            ->with('threads', Thread::all())
            ->with('thread', Thread::where('slug', $slug)->first());
    }

查看:

@foreach($sections as $i => $section)
 <div class="tab-pane fade" id="{{ $thread->slug }}-{{ $section->slug }}">
  @foreach($threads as $thread)
   <div class="card mb-3">
    {{--/// Some Html--}}
   </div
  @endforeach
 </div>
@endforeach

现在这是渲染的html的屏幕截图:

Rendered Html

线程名称是第172页 第一个div的id呈现良好,但请看一下其他两个div的id section-341threads

中的最后一项

1 个答案:

答案 0 :(得分:2)

  

但是我的问题是为什么会这样?为什么这个局部变量会覆盖我的全局变量

因为php无法区分$thread$thread

虽然您可以期望$thread上下文中的变量foreach($threads as $thread)仅存在于foreach主体内,但在php中却并非如此。

局部变量$thread存在于视图范围内,而不是循环体中。 由于php无法区分,因此原始版本会被覆盖。