在我的标头中.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');
}
效果很好。 但是现在我有两个问题没有意义
- 为什么我不能从索引.php上的标头.php访问变量?
- 为什么 __construct() 在控制器上不起作用?
任何帮助将不胜感激
谢谢!
你在任何地方都使用$data
变量,但它超出了范围!
一种解决方案是将其全局定义为:
global $data;
。在您使用或需要它的每种方法的开头。
无需更改更多代码,它应该开箱即用。
另一种解决方案是将其作为类/对象属性,如果您仅在此类/对象中使用它(为什么要将其存储在外部?),如下所示:
public $data;
并以所有方法访问它,例如
$this->data