我希望我对标题的措辞足够准确,但我通常使用 Java,并且在 Web 开发/PHP/CodeIgniter 方面没有太多经验。我很难理解脚本的生命周期,因为我发现尝试在我正在开发的网站上实现某个功能(作为一种学习方法)。我将首先描述我尝试实现的功能,然后我遇到的问题让我质疑我对脚本如何工作的基本理解,因为我习惯了典型的 OOP。
好的,这就去...
我有一个网页,用户可以执行两项基本任务,即创建和删除条目。我试图实现的是一种计算用户完成某项任务需要多长时间的方法。我这样做的方法是有一个主页,其中有一个用户可以选择的任务列表(在本例中为 2,创建和删除)。用户将单击将链接到“真实”主页的任务,然后期望用户在该主页上完成任务。我的脚本如下所示:
<?php
class Site extends CI_Controller {
var $task1;
var $tasks = array(
"task1" => NULL,
"date1" => 0,
"date2" => 0,
"diff" => 0);
function __construct()
{
parent::__construct();
include 'timetask.php';
$this->task1 = new TimeTask("create");
}
function index()
{
$this->tasks['task1'] = $this->task1->getTask();
$this->tasks['diff'] = $this->task1->getTimeDiff();
if($this->tasks['diff'] == NULL)
{
$this->tasks['diff'] = 0;
}
$this->load->view('usability_test', $this->tasks);
}
function origIndex()
{
$this->task1->setDate1(new DateTime());
$this->tasks['date1'] = $this->task1->getDate1()->getTimestamp();
$data = array();
if($q = $this->site_model->get_records())
{
$data['records'] = $q;
}
$this->load->view('options_view', $data);
}
function create()
{
$this->task1->setDate2(new DateTime());
$this->tasks['date2'] = $this->task1->getDate2()->getTimestamp();
$data = array(
'author' => $this->input->post('author'),
'title' => $this->input->post('title'),
'contents' => $this->input->post('contents')
);
$this->site_model->add_record($data);
$this->index();
}
我只包括 create 以保持简短。然后我还有 TimeTask 类,实际上另一个 StackOverflow 非常好心地帮助了我:
<?php
class TimeTask
{
private $task;
/**
* @var DateTime
*/
private $date1, $date2;
function __construct($currTask)
{
$this->task = $currTask;
}
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;
}
/**
* @return get current task
*/
public function getTask()
{
return $this->task;
}
}
?>
我不认为发布这些观点对于这个问题是必要的,但至少这里是链接的制作方式。
<?php echo form_open('site/create');?>
...and...
<?php echo anchor("site/delete/$row->id", $row->title); ?>
现在代码中没有错误,但它没有达到我的预期,我认为原因是因为每次通过新页面调用脚本的函数时,它都不是调用的脚本的同一个实例以前,因此任何以前创建的对象都不再存在。这让我很困惑,让我很不确定如何优雅地实现它。我猜想如何做到这一点的一些方法是通过 URL 传递必要的数据,或者将数据保存在数据库中并稍后检索它以比较时间。推荐的方法是什么,不仅仅是这个,而是任何需要以前创建的数据的方法?另外,我认为脚本一次只对一个网页“活着”是否正确?谢谢!