我有一個Site
對象,但我無法弄清楚如何在網站上存儲一組對象。這些頁面是分層的(網站導航的樹形結構)。我想到了一個樹狀的頁面陣列,但這會讓人感到很痛苦 - 例如, $site->pages[0][3][1]->addContent('<h1>lol</h1>')
。我可以使用具有唯一ID的平面頁面,例如$site->pages['home']->addContent('<p>easier</p>')
,但是如何在渲染導航時從中提取樹?PHP OOP使用對象層次結構
0
A
回答
1
我會使用的網址,如:
http://www.example.org/products/electronics/computer/monitors
而且使用這樣的代碼來表示頁:
$site->pages['products']['electronics']['computer']['monitors']
你可以配置你的Web服務器的所有重定向請求您的.php文件,並且您可以通過分解REQUEST_URI變量來「破解」URL。
0
如果需要收集物體,請查看SplObjectStorage
。
SplObjectStorage類提供從對象到數據的映射,或者通過忽略數據來設置對象集。這種雙重目的在很多情況下都很有用,涉及需要唯一標識對象的情況。
或者,如果您想要一個簡單的可訪問樹結構,請考慮使用SimpleXml。這不會允許您輕鬆使用自定義頁面對象。除了向它添加HTML之外,你似乎對頁面對象做的更多,所以在你的情況下它可能是可行的。
對於更高級的需求,看到Composite Design pattern
1
的一個好方法是戈登說,使用複合模式。一個簡單的實現的,這可能是:
interface SitePart { function getName(); } class Page implements SitePart { function Page($name,$content) { ... } function getName() { ... } function getContent() { ... } } class Category implements SitePart { private $parts = array() function Category($name) { ... } function getName() { ... } function add(SitePart $part) { $this->parts[$part->name] = $part } function get($partName) { return $this->parts[$name] } } class Site extends Category { function Site($name) { ... } }
對於創建層次結構和頁面:
Site Categ 1 Page 1 Categ 1.1 Categ 2
$site = new Site(); $categ1 = new Category('Categ 1'); $categ11 = new Category('Categ 1.1'); $categ2 = new Category('Categ 2'); $site->add($categ1); $site->add($categ2); $categ1->add($categ11); $categ1->add(new Page('Page 1','Hello world');
現在檢索頁面1爲例:
$page = $site->get('Categ 1')->get('Page 1'); echo $page->getContent();
希望這將幫助你。
相關問題
- 1. C#對象層次結構
- 2. OOP:在層次結構中通知其他對象的麻煩
- 3. Java OOP層次結構 - 避免開銷
- 4. PHP調用層次結構
- 5. SFML 2.3中的對象層次結構
- 6. 層次結構,以Java對象
- 7. Dart RPC和對象層次結構
- 8. 如何保存層次結構對象?
- 9. Java層次結構和對象數組
- 10. PHP類層次結構 - 層次結構中的最高類
- 11. findContours使用層次結構
- 12. VIM php omnicomplete - 多級對象層次結構
- 13. 使用Simple.Data映射對象層次結構
- 14. 從libC++使用std :: list的對象層次結構(bug?)
- 15. 使用saxParser填充對象層次結構中的Java nullPointerException
- 16. 使用AutoMapper映射層次結構對象
- 17. 將平面數據結構轉換爲層次結構使用c#對象#
- 18. 如何構建用於層次結構目的的Json對象
- 19. 層次結構
- 20. 轉換對象層次結構,以對象數組
- 21. 跨對象層次結構的同步對象的ivar?
- 22. java對象的層次結構,並通過對象的功能
- 23. 使用Linq構建樹層次結構
- 24. 使用表格構建層次結構 - PHP
- 25. 一次銷燬對象的整個層次結構
- 26. 從'命名空間'字符串構建對象層次結構
- 27. 構造函數/對象的Json.Decoding層次結構
- 28. 從父/子的平面列表構建層次結構對象
- 29. radgridview層次結構
- 30. UIView層次結構