0
class BetterDOMDocument extends DOMDocument 
{
    function __construct($version = null, $encoding = null) {
        parent::__construct($version, $encoding);
    }
}

此代码将生成一个带有空版本属性的 XML 标头。

但是,我不能只将构造函数定义为:

function __construct($version, $encoding) {}

因为如果我想在不传递任何参数的情况下使用此构造函数,现在 PHP 会抱怨未定义变量的使用。

DOMDocument不需要传递$version,如果我不传递值,它将使用默认值。如何在不复制特定默认值的情况下覆盖构造函数,同时保持基类的参数处理不变?

我对此感兴趣的不是我遇到的需要解决方法的问题,而是 PHP 语言设计。能否以及如何在 PHP 中重现 DOMDocument 的行为,或者内部代码如何处理未定义的值有什么特别之处?

4

1 回答 1

3

只需设置一些合理的默认值:

class BetterDOMDocument extends DOMDocument 
{
    function __construct($version = '1.0', $encoding = 'UTF-8') {
        parent::__construct($version, $encoding);
    }
}

如果这实际上是您在构造函数中所做的一切,那么您不需要首先重载它,除非目的是设置您自己的默认值。

在 PHP 中,我怀疑在其他语言中,您实际上不能告诉函数“使用默认值”,除非NULL作为参数传递(例如)由类以使用默认值代替的方式处理。您必须使用现有类/函数的 tte 设计,这可能会有所不同。

于 2012-03-12T17:38:28.903 回答