不,類應該從來沒有是靜態的,如果你正在做面向對象的編程。這也適用於工廠。靜態工廠方法模式(您在示例中顯示)被認爲是不好的做法,因爲它違反了SRP。
靜態變量是不同名稱的全局變量,靜態方法是名稱空間函數,其中名稱空間恰好看起來像類。
如果您需要多個對象來使用相同的會話實例,那麼您應該提供它們。直接或通過使用工廠。
class ObjectFactory
{
protected $session;
public function __construct($session)
{
$this->session = $session;
}
public function create($name)
{
return new $name($this->session);
}
}
您將此工廠的實例傳遞給需要使用會話的創建結構的任何對象。您只需使用此工廠創建對象,並且它們都將使用相同的會話實例進行初始化。
更簡單的例子,你可以只通過該會話的每個對象手動:現在
$session = new Session;
$user = new User($session);
$article = new Document($session);
兩個$user
和$article
實例將共享同一個會話實例。
欲瞭解更多信息,請觀看以下介紹:
不,'MyFactory ::的getSession()'沒有多大意義,是的,使用一個靜態類將會很好。 – Ryan
我認爲如果你這麼傾向於你可以玩多個會話。 –
你爲什麼要多個會議? – Undefined