Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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
为什么我不能从header.php访问变量?_Php_Codeigniter - Fatal编程技术网

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

为什么我不能从header.php访问变量?,php,codeigniter,Php,Codeigniter,在我的header.php中,我有一个名为$navigation的变量,其中分配了一个类$导航=$this->nav\u class=new\navigation\u menu\navigation 当我在index.php上访问变量$navigation时,它抛出一个错误,称为undefined variable$navigation 但是当我直接在index.php上实例化它时,它就可以工作了 我在控制器页面上尝试通过方法名索引传递$navigation变量,效果很好 public func

在我的header.php中,我有一个名为$navigation的变量,其中分配了一个类$导航=$this->nav\u class=new\navigation\u menu\navigation

当我在index.php上访问变量$navigation时,它抛出一个错误,称为undefined variable$navigation

但是当我直接在index.php上实例化它时,它就可以工作了

我在控制器页面上尝试通过方法名索引传递$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');
}
那很好。但问题是,当我需要将该类用于多个方法时。我不想为每个方法实例化一个新对象

这就引出了下一个问题。但是当我做一个构造时,我得到了这个信息

Severity: Notice

Message: Undefined property: PublicPage::$load

Filename: controllers/PublicPage.php
苏欧。我想我唯一的选择是在PublicPage.phpcontroller页面中定义一个名为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');

    }
这很有效。但现在我有两个问题没有意义

为什么我不能从index.php上的header.php访问变量? 为什么构造不能在控制器上工作? 任何帮助都将不胜感激

谢谢

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

global $data;
…在您使用或需要的每种方法的开头。 不需要再修改任何代码,它应该是现成的

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

public $data;
并通过所有方法访问它,如

$this->data

这是关于对象属性的。如果只需要对象的方法使用此$data,那么最好将其定义为objects属性并通过$this->data访问。在这里,请阅读PHP.net手册: