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

标签 php laravel-5 laravel-blade

今天我遇到了一个非常奇怪的问题。
我有一个 Controller ,我从那里向 View 发送三个变量 sections threadthreads .
在我看来,我正在使用 foreach 循环遍历所有部分,如下所示:

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

对于每个部分,我都在创建一个 div 并给出这样的 id:
id="{{ $thread->slug }}-{{ $section->slug }}
现在在这个 div 中,我循环遍历所有线程,如下所示:
@foreach($threads as $thread)

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

这是我的 Controller :
    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 的 idsection-341这是 threads 中的最后一项

最佳答案

but my question is why is this happening? why is this local variable overwriting my global variable



因为php无法区分$thread$thread .

虽然您可以期待变量 $threadforeach($threads as $thread) 的上下文中只住在foreach正文,在 php 中并非如此。

局部变量 $thread存在于您的 View 范围内,而不是您的循环体。
由于php不区分,所以覆盖原来的。

关于php - Laravel - foreach 局部变量正在覆盖全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52469479/

相关文章:

php - 错误 "Trying to access array offset on value of type null"laravel 5.8.26 Php 7.4.2

php - Laravel Blade View 无法工作,没有 Blade 也可以工作

php - 无法将变量传递给 Laravel x 组件

php - 用php脚本执行c++程序

php - 如何在 PHP (joomla) 中显示来自 mysql blob 的图像

php - 使用 php 填充可编辑的 PDF 表单字段

php - 信用卡信息,必须采取哪些安全措施?

mysql - laravel 关系 hasMany 访问器 count()

php - 当存在多个场景时 Behat 挂起,但适用于单个场景

php - 拉拉维尔 8 : Undefined variable when loading a Blade into another Blade