Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel-foreach局部变量正在覆盖全局变量_Php_Laravel 5_Laravel Blade - Fatal编程技术网

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中从外部访问??完全正确;范围不限于循环本身。您可以不能在视图外部或创建局部变量的函数/方法外部使用局部变量。有关详细信息,请参阅