我正在尝试从同一个类中的函数访问类中声明的数组。我尝试了几种不同的方法来尝试使其工作,但我对PHP相对较新。这是我的代码片段
class Site extends CI_Controller {
var $dates = array(
"Task" => NULL,
"Date1" => NULL,
"Date2" => NULL,
"TimeDiff" => NULL
);
function index()
{
if($this->$dates['Date1'] != NULL && $this->$dates['Date2'] != NULL)
{
$this->$dates['TimeDiff'] = $this->$dates['Date2']->getTimestamp() - $this->$dates['Date1']->getTimestamp();
}
$this->load->view('usability_test', $this->$dates);
}
我也尝试过使用global关键字
global $dates;
无论如何我仍然会收到“未定义变量”错误。谢谢!
答案 0 :(得分:9)
您希望$this->dates['Date1']
代替$this->$dates['Date1']
。请注意$
之前dates
没有。
作为旁注,请确保通过定义CI_Controller
来正确延长__construct()
:
class Site extends CI_Controller {
// class properties, etc.
function __construct(){
parent::__construct();
}
// class methods, etc.
}
另外需要注意的是,从PHP5开始,var
已被弃用。根据您的需要,您可以使用public
,private
或protected
(编辑:当然,假设您使用PHP5 )
答案 1 :(得分:3)
创建一个帮助程序类,在此处执行您所需的操作:
class MyTask
{
private $task;
/**
* @var DateTime
*/
private $date1, $date2;
...
public function getTimeDiff() {
$hasDiff = $this->date1 && $this->date2;
if ($hasDiff) {
return $this->date2->getTimestamp() - $this->date1->getTimestamp();
} else {
return NULL;
}
}
public function __toString() {
return (string) $this->getTimeDiff();
}
/**
* @return \DateTime
*/
public function getDate1()
{
return $this->date1;
}
/**
* @param \DateTime $date1
*/
public function setDate1(DateTime $date1)
{
$this->date1 = $date1;
}
/**
* @return \DateTime
*/
public function getDate2()
{
return $this->date2;
}
/**
* @param \DateTime $date2
*/
public function setDate2(DateTime $date2)
{
$this->date2 = $date2;
}
}
这里的关键点是该范围和内容的所有细节都在课堂内。所以你不必在别处照顾。
作为额外奖励,__toString
方法可帮助您轻松地将此对象集成到视图中,因为您可以只有echo
个对象。
class Site extends CI_Controller
{
/**
* @var MyTask
*/
private $dates;
public function __construct() {
$this->dates = new MyTask();
parent::__construct();
}
function index()
{
$this->load->view('usability_test', $this->$dates);
}
...
更好?