문제
나는있다 Document
결국 gzipped 한 다음 페이지에 인쇄 될 문서를 담당하는 클래스. 이 문서에는 문서의 문서가 있습니다. 내가 직면하고있는 문제는 DocType를 올바르게 구현하는 방법입니다.
예를 들어 : 가장 자주 사용되는 인기있는 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; } }
그것을하는 또 다른 방법은 단순히 전체 문서를 매번 입력 해야하는 것입니다.
$document->setDoctype('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">');
이 문제를 어떻게 처리 하시겠습니까?
해결책
사용자 정의 문서 입력을 허용하는지 여부에 따라 다릅니다. 그 상황을 예외로 생각하면 누군가가 정의되지 않은 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');
}
}
}
DocType 정의를 입력 해야하는 두 번째 솔루션은 Imo Ugly이며 피할 수 있습니다.
다른 팁
DocType W3C 목록을 확인해야한다고 생각합니다.http://www.w3.org/qa/2002/04/valid-dtd-list.html
사용자는 사용자 정의 문서를 입력 할 수 있습니까?
아마도 기본 클래스를 만듭니다
문서
각 유형으로 확장하십시오.
StrictDoc은 DOC 등을 확장합니다.
그리고 각각에 대한 자체 문서 유형을 설정합니다. DOC 유형에 추가하려면 DOC를 확장하는 다른 클래스를 작성하십시오.