سؤال

انا املك Document الطبقة المسؤولة عن الاحتفاظ بالوثيقة التي ستكون في نهاية المطاف gzpeced ثم طباعتها على الصفحة. في هذه الوثيقة تحمل DocType المستند. المشكلة التي أتواجهها هي كيفية تنفيذ عرض DocType بشكل صحيح.

على سبيل المثال: يمكنني إنشاء مجموعة من المستندات الشائعة التي هي الأكثر استخداما بشكل متكرر، ثم إذا أدخلت "صارمة"، فستختار تلقائيا HTML 4.01 Strict. وبعد إذا لم تكن هناك doctype معروف، فقد تفترض أنك تدخل في DocType مخصص، وعرض ما قمت بإدخاله. هذا يبدو خطأ عرضة وشفت.

 وثيقة $-> setdoctype ("صارمة")؛ ..... في فئة بعيدة، بعيدا، بعيدا ........ وظيفة setdoctype ($ نوع) {en. هذا-> DocTypes [نوع $]؛ } آخر {$ this-> doctype = $ نوع؛ }}

هناك طريقة أخرى للقيام بذلك، يجب أن تدخل ببساطة في DocType بأكملها في كل مرة.

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

كيف تتعامل مع هذه المشكلة؟

هل كانت مفيدة؟

المحلول

ذلك يعتمد إذا كنت ترغب في السماح بإدخال DocTypes مخصص. إذا كنت تفكر في أن الوضع استثناء، فمن المحتمل أن ترمي استثناء عندما يحاول شخص ما استخدام 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');
        }
    }
}

الحل الثاني حيث يجب عليك كتابة تعريف DocType هو IMO قبيح وأود تجنبه.

نصائح أخرى

أعتقد أنه يجب عليك فقط الخروج من قائمة DocType W3C.http://www.w3.org/qa/2002/04/valid-dd-list.html.

هل يسمح للمستخدمين بإدخال DocType مخصص؟

ربما إنشاء فئة قاعدة

Doc.

وتمديده لكل نوع، على سبيل المثال:

StrentDoc يمتد doc إلخ.

وسوف تضع نوع Doc الخاص به لكل منها. إذا كنت ترغب في إضافة أنواع DOC، فما عليك سوى إنشاء فئة أخرى تمتد Doc.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top