Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 输入doctype_Php_Oop_Doctype - Fatal编程技术网

Php 输入doctype

Php 输入doctype,php,oop,doctype,Php,Oop,Doctype,我有一个Document类,负责保存最终将被gzip压缩并打印到页面上的文档。在该文档中保存文档的DocType。我面临的问题是如何正确实现显示Doctype 例如:我可以创建一个最常用的流行doctype数组,然后如果输入“strict”,它会自动选择HTML4.01 strict。如果没有已知的DocType,它可能会假定您正在输入自定义DocType,并且只显示您输入的内容。这似乎是一个容易出错且笨拙的问题 $document->setDoctype("strict"); ...

我有一个
Document
类,负责保存最终将被gzip压缩并打印到页面上的文档。在该文档中保存文档的DocType。我面临的问题是如何正确实现显示Doctype

例如:我可以创建一个最常用的流行doctype数组,然后如果输入“strict”,它会自动选择
HTML4.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(“严格”); ..... 在一个很远很远的班级里。。。。。。。。 函数setDocType($type) { if(在数组中($type,$this->doctypes)) { $this->doctype=$this->doctypes[$type]; } 其他的 { $this->doctype=$type; } } 另一种方法是每次只需输入整个DocType

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

您将如何处理此问题?

是否允许用户输入自定义doctype

也许可以创建一个基类

医生

并将其扩展到每种类型,例如:

StrictDoc扩展了Doc 等等


它将为每种类型设置自己的文档类型。如果您想添加到doc类型,只需创建另一个扩展doc的类。

我认为您应该签出doctype w3c列表。

这取决于您是否允许输入自定义文档类型。如果认为这种情况是例外,那么当有人尝试使用未定义的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定义的解决方案非常难看,我会避免它。

正是我想要的。