She*_*zad 4 php laravel-5 laravel-blade
今天我遇到了一个非常奇怪的问题。我有一个控制器,我将三个变量发送到视图sections thread和threads。在我看来,我正在使用 foreach 循环遍历所有部分,如下所示:
@foreach($sections as $i => $section)
Run Code Online (Sandbox Code Playgroud)
对于每个部分,我创建一个 div 并给出该 id,如下所示:
id="{{ $thread->slug }}-{{ $section->slug }}
现在在这个 div 中我正在循环遍历所有线程,如下所示:
@foreach($threads as $thread)
Run Code Online (Sandbox Code Playgroud)
并为每个线程创建div。现在的问题是,当线程循环完成线程中存储在局部变量 thread 中的最后一项时,会覆盖从视图发送的线程变量。现在,我知道要解决这个问题,我可以将 foreach 循环中的局部变量重命名为其他名称,但我的问题是为什么会发生这种情况?为什么这个局部变量会覆盖我的全局变量?
这是我的控制器:
public function show($slug)
{
return view('thread.show')
->with('sections', Section::all())
->with('threads', Thread::all())
->with('thread', Thread::where('slug', $slug)->first());
}
Run Code Online (Sandbox Code Playgroud)
看法:
@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
Run Code Online (Sandbox Code Playgroud)
现在这是渲染的 html 的屏幕截图:
线程名称是 page-172 第一个 div 的 id 渲染得很好,但是看看其他两个 div 的 id,
section-341这是threads
但我的问题是为什么会发生这种情况?为什么这个局部变量会覆盖我的全局变量
因为php无法区分$thread和$thread。
$thread虽然您可能期望上下文中的变量foreach($threads as $thread)仅存在于foreach主体内,但在 php 中情况并非如此。
局部变量$thread存在于您的视图范围内,而不是您的循环体中。由于php不区分,所以原来的就被覆盖了。