我正在创建帖子公告项目。
在这里,我创建了Session class
来管理session
。
我的index.php
$bulletin = new Controller_Bulletin();
$bulletin->setParams(array_merge($_GET, $_POST));
$bulletin->execute('index'); // Execute index action
我的Controller_Bulletin.php
class Controller_Bulletin extends Controller_Base
{
...
public function index() // My index action
{
// Render the index html
$this->render('bulletin/index.php', get_defined_vars());
}
public function insert() // My insert action
{
...
}
...
}
我的Session class
class Session
{
public function __construct()
{
session_start();
}
...
}
我需要在每个动作中加载Session类。
示例:index,insert等
但是当我把$session = new Session();
放在每个动作中时。
我的导师说这不好。
也许是因为我在每一个动作中都重复了它。
Controller_Bulletin class
public function index()
{
$session = new Session();
...
}
public function insert()
{
$session = new Session();
...
}
我对OOP仍然不太满意。 有人能告诉我应该在哪里调用会话对象吗? 如果我的问题仍然不明确,请告诉我。
答案 0 :(得分:0)
您可以在每个操作上加载$session = new Session();
。但为此,您必须对public function __construct()
进行一些小改动。将您的功能更改为
public function __construct()
{
if(session_id() === ""){
session_start();
}
}
这将检查之前是否有任何会话。如果是这样,它将不会重新开始并且不会出现任何错误。
答案 1 :(得分:0)
怎么样这样呢
class Controller_Bulletin extends Controller_Base {
protected $session;
public function __construct() {
parent::__construct();
$this->session = new Session();
}
public function index() { // My index action
// Render the index html
// use $this->session here
$this->render('bulletin/index.php', get_defined_vars());
}
public function insert() { // My insert action
// use $this->session here
}
}