2010-07-31 5 views
0

나는 Site 객체를 가지고 있지만 사이트에 Page 객체 컬렉션을 저장하는 것이 가장 좋은 방법을 찾아 낼 수 없습니다. 페이지는 계층 적입니다 (웹 사이트 탐색을위한 트리 구조). 나무와 비슷한 페이지 배열에 대해 생각했지만 상호 작용할 수있는 고통이있었습니다. $site->pages[0][3][1]->addContent('<h1>lol</h1>'). $site->pages['home']->addContent('<p>easier</p>')과 같은 고유 한 ID가있는 페이지의 편평한 배열을 사용할 수는 있지만 렌더링 탐색시 트리를 어떻게 추출할까요?PHP OOP가 객체 계층 구조로 작업 중

답변

1

내가 같은 URL을 사용합니다 : 페이지를 표현하기 위해

http://www.example.org/products/electronics/computer/monitors

을 그리고 다음과 같은 코드를 사용

$site->pages['products']['electronics']['computer']['monitors'] 

당신은 모든 리디렉션하도록 웹 서버를 구성 할 수 있습니다 .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(); 

나는 희망 당신을 도울 것입니다.

관련 문제