如果我在功能$data['error']
和index()
中设置echo $error
,则会在我的视图页面中显示。但是,如果我在构造函数中设置变量,如下所示,并在视图页面中尝试echo $error
,则会显示严重性:
通知消息:未定义的变量:错误。
<?php
class Login extends CI_Controller
{
function __construct()
{
parent::__construct();
$data['error'] = 'hello';
}
function index()
{
//$data['error'] = 'hello';
$data['main_content'] = 'login';
$this->load->view('inc/template', $data);
}
}
答案 0 :(得分:1)
这是由于范围在这里是一个简短的例子:
<?php
class Login extends CI_Controller
{
/**
* @var array only accessable within the scope of $this, inside Login class
*/
private $data = [];
public function __construct()
{
$foo = 'bar';
$this->data = ['error' => 'hello'];
}
public function index()
{
var_dump($foo); // Severity: Notice Message: Undefined variable: foo
// it's only available in the scope of __construct()
$this->data['main_content'] = 'login';
// here you pass $this->data and then CI will extract the array keys
// giving you access to the $error variable
$this->load->view('inc/template', $this->data);
}
}
这与常规程序PHP完全相同,您无法在不使用global $varName
的情况下访问函数中的变量,您必须传入变量。
我建议快速阅读the basics
答案 1 :(得分:0)
是的,因为您只在本地定义$ data到构造函数块
如果您希望任何类功能块可以访问变量
然后你可以创建一个新的属性
public $data;
private $data;
然后
在构造函数块上,您可以像
一样使用它$this->data['error'] = 'hellow';
并在函数索引块
上$this->data['main_content'] = 'login';
答案 2 :(得分:0)
$data
在控制器的每个功能中被视为不同
如果在构造函数中创建$data
且索引中相同,则将它们视为不同的变量,其范围也是本地的
public function __construct()应该包含:
allocating resources used in entire class ex. $this->load
check user authentication (if entire class requires it)
公共功能索引()应包含:
allocating resources used only in this function
calling views or displaying anything
仅在此功能中记住资源
或在类中创建$ data作为全局变量,并在需要的地方将其用作$this->data
答案 3 :(得分:0)
似乎你不了解这个问题的变量范围。
尝试这样的事情。
class Login extends CI_Controller
{
function __construct()
{
parent::__construct();
$this->data['error'] = 'hello';
}
function index()
{
//$data['error'] = 'hello';
$data['main_content'] = 'login';
$this->load->view('inc/template', $this->data);
}
}
You can then also pass it to the view using the variable $this->data too.