簡體   English   中英

PHP OOP使用對象層次結構

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM