2009-08-17 9 views
0

결국에는 gzip으로 압축 된 다음 페이지에 인쇄 할 문서를 보관하는 데는 Document 클래스가 있습니다. 이 문서에는 문서의 DocType이 있습니다. 내가 직면하고있는 문제는 Doctype을 올바르게 구현하는 방법이다.Doctypes 입력

예 : 자주 사용되는 인기있는 Doctypes 배열을 만들 수 있으며 'strict'를 입력하면 자동으로 HTML 4.01 Strict을 선택할 것입니다. 알려진 DocType이 없으면 사용자 정의 DocType을 입력하고 사용자가 입력 한 내용 만 표시한다고 가정 할 수 있습니다. 이것은 오류가 발생하기 쉽고 바쁜 것처럼 보입니다.

 
    $document->setDoctype("strict"); 

    ..... in a class far, far, away........ 
    function setDocType($type) 
    { 
     if(in_array($type, $this->doctypes)) 
     { 
      $this->doctype = $this->doctypes[$type]; 
     } 
     else 
     { 
      $this->doctype = $type; 
     } 
    } 

또 다른 방법은 매번 전체 DocType을 입력하면됩니다.

$document->setDoctype('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'); 

이 문제를 어떻게 처리하겠습니까?

답변

1

맞춤 doctype을 입력 할 수 있는지 여부에 따라 다릅니다. 이 상황을 예외로 생각한다면 누군가가 정의되지 않은 Doctype을 사용하려고 시도 할 때 예외를 던져야합니다. 실제 doctype을 설정하기 전에 해당 doctype을 정의하고 해당 메소드를 사용하여 강제로 정의하는 방법을 제공 할 수도 있습니다. 이 문서 타입 정의를 입력해야합니다

class Document { 
    private $doctypes = array(
     'html4' => '...', 
     'xhtml1strict' => '...' 
    ); 

    private $doctype = null; 

    public function addCustomDocType($name, $definition) { 
     if (empty($this->doctypes[$name])) { 
      $this->doctypes[$name] = $definition; 
     } else { 
      throw new Exception('Definition already exists'); 
     } 
    } 

    public function setDocType($name) { 
     if (!empty($this->doctypes[$name])) { 
      $this->doctype = $this->doctypes[$name]; 
     } else { 
      throw new Exception('Doctype not found'); 
     } 
    } 
} 

두 번째 솔루션은 IMO 추한 내가 그것을 피할 것 :

나는 같은 것을 할 것입니다.

+0

정확히 내가 무엇을 찾고 있었습니까. –

0

사용자가 사용자 정의 Doctype을 입력 할 수 있습니까?

아마도 기본 클래스

문서

를 작성하고 각 유형에 확장, 예를 :

StrictDoc 등

문서 확장 그리고 그것은 자신의 문서 유형을 설정합니다 각각. 문서 유형에 추가하려면 Doc을 확장하는 다른 클래스를 작성하기 만하면됩니다.