今天,我面临一个非常奇怪的问题。
我有一个控制器,将从该控制器向视图sections
thread
和threads
发送三个变量。
在我看来,我正在使用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的屏幕截图:
线程名称是第172页
第一个div的id呈现良好,但请看一下其他两个div的id
section-341
是threads
答案 0 :(得分:2)
但是我的问题是为什么会这样?为什么这个局部变量会覆盖我的全局变量
因为php无法区分$thread
和$thread
。
虽然您可以期望$thread
上下文中的变量foreach($threads as $thread)
仅存在于foreach
主体内,但在php中却并非如此。
局部变量$thread
存在于视图范围内,而不是循环体中。
由于php无法区分,因此原始版本会被覆盖。