我需要一些幫助類定義OOP在PHP,基於會話
我開始一個PHP 7.0的項目,如果你不是一個PHP的大師,但有OOP經驗,我相信你也可以反對behaivor幫幫我。
我有以下類,有助於建立一個HTML頁面
interface PageBuilderInterface
{
public function getHTMLPage(): string;
public function getHead(): string;
public function getBody(): string;
public function getMenu(): string;
public function getMainArea(): string;
public function getFooter(): string;
}
class PageBuilder implements PageBuilderInterface
{
public function getHTMLPage(): string
{
return "<!doctype html><html>" .
$this->getHead() .
$this->getBody()
"</html>";
}
public function getHead(): string
{
return '<meta charset="utf-8">
<title>Page Title</title>';
}
public function getBody(): string
{
return "<body>" .
$this->getMenu() .
$this->getMainArea() .
$this->getFooter() .
"</body>";
}
public function getMenu(): string
{
return '<a href="index.php">Home</a> |
<a href="login.php">Login</a> |
<a href="register.php">Become Member</a> ';
}
public function getMainArea(): string
{
return '<h1>Main Content Here</h1>
<p>Loren Ipsun...</p>';
}
public function getFooter(): string
{
return '<div>Footer Page Here</div>';
}
}
用法:
$page = new PageBuilder();
echo $page->getHTMLPage();
它是簡單的作品。
現在,我有了一個新的要求:根據用戶會話,一些方法應該會有很大的不同,例如我們有「訪客」,「基本成員」和「黃金會員」用戶類型。主菜單上
鏈接是針對每種類型的構件的不同,並且應該是能夠顯示不同的信息的每個成員(例如消息,信用餘額或任何其它信息)
所以,
PageBuilder :: getMenu()
應返回一些鏈接,如
首頁|登錄|成爲訪問者會員 主頁|消息|註銷基本會員 首頁|消息|餘額$ 208.23 |退出高爾夫球員
未來我可能需要更多的「用戶類型」和不同的鏈接,這是對未來應該很容易改變的方式。
我知道:我確實需要得到內部使用getMenu()方法的用戶狀態,但下列選項不知道至極是最好的:
1 - 從會議
public function getMenu(): string
{
$user = new User($_SESSION['id_user']);
$links = $user->getLinks(); // perhaps an array with links
return doSomeFormatToLinks($links);
}
2創建用戶 - 全局用戶對象
public function getMenu(): string
{ global $user;
$links = $user->getLinks();
/* .... build html links here */
}
3 - 作爲參數
public function getMenu(User $user): string
{
$links = $user->getLinks();
}
4 - 用戶對象作爲類attibute與構造
class PageBuilder implements PageBuilderInterface
{
private $user;
public function __construct(User $user)
{
$this->user = $user
}
}
5設置它 - 比4相似,但與設定器
class PageBuilder implements PageBuilderInterface
{
private $user;
public function __construct()
{
$this->user = $user
}
public function setUser($this->user = $user)
{
$this->user = $user;
return $this;
}
}
6 - 其他選項?
我在尋找最好的選擇,注意SOLID原則,並期望以易於模擬和測試的方式設計它,試圖將「用戶」登錄從「pagebuilder」邏輯中分離出來可能
選項1和2:我對他們有不好的感覺,他們使用全球地位,它是聞到,是不是? 選項3:我覺得很容易測試。 選項4和5:我認爲將用戶作爲屬性是個不錯的主意,因爲我可以在課程中使用其他方法的用戶狀態,但另一方面,我擔心它是光鮮的,我說的是用戶是屬於一個頁面製造商... 選項6:我相信你的建議將是最好的:D
感謝您的時間!
這些天使用一個類來構建html並不是很好的做法。你有沒有考慮過使用現代框架?他們開箱即可完成大部分工作,因此您可以專注於您的網站代碼。 – Mei