为什么我不能从我的标头.php访问变量


Why can't I access a variable from my header.php?

在我的标头中.php我有一个名为 $navigation 的变量,并为其分配了一个类。 $navigation = $this->nav_class = new 'navigation_menu'Navigation();

当我访问索引上的变量$navigation时.php,它会抛出一个错误,说未定义的变量"$navigation"

但是当我直接在索引上实例化它时.php它可以工作。

我尝试在控制器页面上通过方法名称"index"传递$navigation变量,效果很好......

public function index()

{
        $data['title'] = "Welcome";
        $data['navigation'] = new 'navigation_menu'Navigation();

        $this->load->view('public/includes/header.php', $data);
        $this->load->view('index', $data);
        $this->load->view('public/includes/footer.php');
}

这工作正常。但问题是,当我需要将类用于多个方法时。我不想为每个方法实例化一个新对象

因此,这将我引向下一件事__construct()。但是当我做一个构造时,我收到这条消息。

Severity: Notice
Message: Undefined property: PublicPage::$load
Filename: controllers/PublicPage.php

所以。我想我唯一的选择是在 PublicPage.php(控制器页面)中定义一个名为导航的新方法并返回类......这是我所做的

private function navigation (){
        return $nav = new 'navigation_menu'Navigation();
    }

    public function index()
    {
        $data['title'] = "Welcome";
        $data['navigation'] = $this->navigation();
        $this->load->view('public/includes/header.php', $data);
        $this->load->view('index', $data);
        $this->load->view('public/includes/footer.php');
    }

效果很好。 但是现在我有两个问题没有意义

  1. 为什么我不能从索引.php上的标头.php访问变量?
  2. 为什么 __construct() 在控制器上不起作用?

任何帮助将不胜感激

谢谢!

你在任何地方都使用$data变量,但它超出了范围!
一种解决方案是将其全局定义为:

global $data;

。在您使用或需要它的每种方法的开头。
无需更改更多代码,它应该开箱即用。

另一种解决方案是将其作为类/对象属性,如果您仅在此类/对象中使用它(为什么要将其存储在外部?),如下所示:

public $data;

并以所有方法访问它,例如

$this->data