Php Laravel-foreach局部变量正在覆盖全局变量
今天我面临一个非常奇怪的问题。 我有一个控制器,从那里我将三个变量发送到视图Php Laravel-foreach局部变量正在覆盖全局变量,php,laravel-5,laravel-blade,Php,Laravel 5,Laravel Blade,今天我面临一个非常奇怪的问题。 我有一个控制器,从那里我将三个变量发送到视图部分线程和线程。 在我看来,我使用foreach循环遍历所有部分,如下所示: @foreach($sections as $i => $section) @foreach($threads as $thread) 对于每个部分,我创建一个div,并给出如下id: id=“{{$thread->slug}}-{{$section->slug}} 现在,在这个div中,我将遍历所有线程,如下所示: @foreach
部分
线程
和线程
。
在我看来,我使用foreach循环遍历所有部分,如下所示:
@foreach($sections as $i => $section)
@foreach($threads as $thread)
对于每个部分,我创建一个div,并给出如下id:
id=“{{$thread->slug}}-{{$section->slug}}
现在,在这个div中,我将遍历所有线程,如下所示:
@foreach($sections as $i => $section)
@foreach($threads as $thread)
以及为每个线程创建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());
}
视图:
@foreach($i=>$section)
@foreach($threads作为$thread)
{{--///一些Html--}
但我的问题是为什么会发生这种情况?为什么这个局部变量会覆盖我的全局变量
因为php无法区分$thread
和$thread
虽然在foreach($threads as$thread)
的上下文中,变量$thread
可能只存在于foreach
主体中,但在php中,情况并非如此
局部变量$thread
存在于视图的范围内,而不是循环体。
由于php不区分,因此会覆盖原始线程。foreach($threads作为$thread)
覆盖您原来的$thread
。是的,正如我在问题中提到的,我知道这一点,但我想知道为什么?因为这里没有全局变量和局部变量。哦……所以在循环体中创建的局部变量可以在php中从外部访问??完全正确;范围不限于循环本身。您可以不能在视图外部或创建局部变量的函数/方法外部使用局部变量。有关详细信息,请参阅