为什么我不能从header.php中访问变量?

时间:2015-01-20 03:17:13

标签: php codeigniter

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

当我访问index.php上的变量$ navigation时,它会抛出一个错误,说明未定义的变量“$ navigation”

但是当我直接在index.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

的sooo。我想我唯一的选择是在PublicPage.php(控制器页面)中定义一个名为navigation的新方法并返回类...这就是我做的事情

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. 为什么我不能从index.php上的header.php访问变量?
  2. 为什么__construct()不能在控制器上运行?
  3. 任何帮助都会非常感激

    谢谢!

1 个答案:

答案 0 :(得分:0)

您到处使用$data变量,但它超出了范围!
一种解决方案是将其定义为全局,如:

global $data;

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

另一个解决方案是将它作为类/对象属性,如果你只在这个类/对象中使用它(为什么要将它存储在外面呢?),如:

public $data;

并以

等所有方法访问它
$this->data