【问题标题】:Why can't I access a variable from my header.php?为什么我不能从 header.php 访问变量?
【发布时间】:2015-01-20 03:17:12
【问题描述】:

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

当我访问 index.php 上的变量 $navigation 时,它会抛出一个错误,提示 undefined variable "$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

太好了。我想我唯一的选择是在 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. 为什么我不能从 index.php 上的 header.php 访问变量?
  2. 为什么 __construct() 不能在控制器上工作?

任何帮助将不胜感激

谢谢!

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

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

    global $data;
    

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

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

    public $data;
    

    并在所有方法中访问它,例如

    $this->data
    

    【讨论】:

    • 嗯,这是关于对象属性的。如果您需要这个$data 仅用于对象的方法,那么您最好将其定义为对象属性并由$this->data 访问。在这里,阅读 PHP.net 手册:php.net/manual/en/language.oop5.properties.php
    猜你喜欢
    • 1970-01-01
    • 2019-05-04
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多