我的一位同事搬到了另一家公司,我得到了他現有項目的源代碼。 我很震驚代碼看起來有多混亂。我不是一個PHP開發人員,所以也許這是一個愚蠢的問題,但在我看來,他太多地使用了$_SESSION
,我們在Sessions中遇到了很多錯誤。我想知道封裝$_SESSION
是否好,併爲每個值使用自己的方法編寫。封裝PHP會話
我這個代碼中看到的問題是,他使用的會話對象這樣
$_SESSION['customer']['items'] = getItems() //returns an array
$_SESSION['article'][$Id]['name'] = utf8_decode[$received[1]];
所以從我的角度來看我將自己所有的東西存放在簡單Popos,並把那些到會話中。
所以婆婆對客戶應該是這樣
class CustomerPopo
{
private $_id;
private $_salutation;
private $_name;
private $_surename;
public function getId()
{
return $this->_id;
}
public function setId($value)
{
$this->_id = $value;
}
public function getSalutation()
{
return $this->_salutation;
}
public function setSalutation($value)
{
$this->_salutation = $value;
}
public function getName()
{
return $this->_name;
}
public function setName($value)
{
$this->_name = $value;
}
public function getSurename()
{
return $this->_surename;
}
public function setSurename($value)
{
$this->_surename = $value;
}
function CustomerPopo() {
}
}
我想象中的SessionManager這樣
class SessionManager
{
private static function getValue($valueName)
{
$value = SessionManager::getValueFromSession($valueName);
if (is_null($value)) {
//Handle stuff and do further checks
}
return $value;
}
private static function getValueFromSession($valueName)
{
$value = null;
if (isset($_SESSION[$valueName])) {
$value = $_SESSION[$valueName];
}
return $value;
}
private static function setValue($valueName, $value)
{
$_SESSION[$valueName] = $value;
}
private static function clearValue($valueName)
{
if (isset($_SESSION[$valueName])) {
unset($_SESSION[$valueName]);
}
}
public static function getCustomer()
{
$customer = '';
try {
$customer = SessionManager::getValue('customer');
} catch (Exception $e) {
$customer = '';
}
return $customer;
}
public static function setCustomer($customer)
{
SessionManager::setValue('customer', $customer);
}
}
有了這個,我會殺了一些來自不同的拼法其中出現的錯誤客戶/客戶/客戶這個詞。 我想象SessionManager會變得很大,因爲我們在代碼中有~30個會話變量。
是否有一個設計模式,我可以按照實現這樣一個SessionManager,而不會讓它變得更糟?如我所說,我不是很熟悉PHP(還)。
編輯:
由於這種方法似乎我怎麼能處理30個Session變量我提到的是有效的?如果我有一組/得到,也許每個值一個明確的方法,我將結束與60-90方法
我會看看我如何更改代碼,以便我不使用靜態方法 – Bongo