Belgetürleri girme

2 Cevap php

Sonunda gzip'li ve sonra sayfa üzerine basılacak belgeyi tutan sorumlu bir Document sınıf var. Bu Belgesi'nde belgenin DocType tutar. Karşılıklı Sorunu doğru Doctype görüntüleniyor uygulamak için nasıl.

Örneğin: Ben en sık kullanılan popüler belgetürleri bir dizi oluşturabilir ve 'sıkı' girerseniz o zaman, otomatik olarak alacağını HTML 4.01 Strict. Bilinen bir DocType yoksa, o özel bir DocType giriyoruz varsayalım, ve sadece girdiğiniz ne görüntüleyebilirsiniz. Bu bir hata eğilimli ve clumbsy görünüyor.

    $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;
         }
    }

Bunu yapmak için başka bir yol sadece tüm DocType her zaman girmek zorunda olacaktır.

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

Nasıl bu sorunla başa çıkmak istiyorsunuz?

2 Cevap

Özel belgetürleri girerken izin vermek istiyorsanız bağlıdır. Eğer bu durum bir istisna düşünürsek birisi tanımsız doctype kullanarak çalıştığında muhtemelen bir istisna atmak gerekir. Ayrıca, gerçek bir doküman türü ayarlamadan önce, bu yöntemi kullanarak özel bir doküman türü ve kuvvet tanımlanması için bir yöntem sağlayabilir.

Ben böyle bir şey yapardı:

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');
        }
    }
}

Eğer doctype tanımını yazmanız gerekir İkinci çözüm IMO çirkin olduğunu ve bunu önleyeceğini.

Kullanıcıların özel doctype girmek için izin var mı?

Belki bir temel sınıf oluşturmak

Doktor

Ve her türüne, ex uzatmak:

StrictDoktor extends Doktor etc.

And it'll set its own doc type for each. If you want to add to the doc types, simply create another class that extends Doktor.