[英]PHP OOP working with a hierarchy of objects
我有一個Site
對象,但是我不知道如何最好地在Site上存儲Page
對象的集合。 這些頁面是分層的(網站導航的樹形結構)。 我想到了一個類似樹的頁面數組,但是要與之交互很$site->pages[0][3][1]->addContent('<h1>lol</h1>')
-例如$site->pages[0][3][1]->addContent('<h1>lol</h1>')
。 我可以使用具有唯一ID的平面頁面數組,例如$site->pages['home']->addContent('<p>easier</p>')
但是當涉及到這種情況時,我將如何從中提取樹渲染導航?
我會使用以下網址:
http://www.example.org/products/electronics/computer/monitors
並使用如下代碼表示頁面:
$site->pages['products']['electronics']['computer']['monitors']
您可以將Web服務器配置為將所有請求重定向到.php文件,並且可以通過展開REQUEST_URI變量來“分解” URL。
如戈登所說,一種好方法是使用復合模式。 一個簡單的實現可以是:
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();
我希望這會對你有所幫助。
如果需要收集對象,請查看SplObjectStorage
。
SplObjectStorage類提供從對象到數據或通過忽略數據的對象集的映射。 在涉及需要唯一標識對象的許多情況下,此雙重目的可能很有用。
或者,如果您想要一個簡單的可訪問樹結構,請考慮使用SimpleXml。 但是,這不會允許您輕松使用自定義頁面對象。 除了向頁面對象添加HTML之外,您似乎沒有對頁面對象做更多的事情,因此在您的情況下這可能是可行的。
有關更多高級需求,請參見“ 復合設計”模式
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.