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