PHP: проходить через неустановленные аргументы, не дублируя значения по умолчанию - PullRequest
0 голосов
/ 12 марта 2012
class BetterDOMDocument extends DOMDocument 
{
    function __construct($version = null, $encoding = null) {
        parent::__construct($version, $encoding);
    }
}

Этот код сгенерирует заголовок XML с пустым атрибутом версии.

Однако я не могу просто определить конструктор следующим образом:

function __construct($version, $encoding) {}

Потому что теперь PHP жалуется на использование неопределенной переменной, если я хочу использовать этот конструктор без передачи аргументов.

DOMDocument не требует передачи $version, будет использоваться значение по умолчанию, если я не передам значение.Как я могу переопределить конструктор, оставив неизменной обработку аргументов базового класса, не дублируя определенные значения по умолчанию?

Меня интересует это не с точки зрения проблемы, в которой я застрял, которая нуждается вОбходной путь, но с точки зрения дизайна языка PHP.Можно ли и как так воспроизвести поведение DOMDocument в PHP или есть что-то особенное в том, как внутренний код может обрабатывать неопределенные значения?

1 Ответ

3 голосов
/ 12 марта 2012

Просто установите некоторые разумные значения по умолчанию:

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

Если это фактически все, что вы делаете в конструкторе, вам не нужно перегружать его в первую очередь, если цель не установлена ​​самостоятельно.значения по умолчанию.

В PHP, и я подозреваю, что в других языках вы не можете сказать функции «использовать значение по умолчанию», если передача NULL в качестве аргумента (например) не обрабатывается классом таким образом.способ, которым он будет использовать значение по умолчанию вместо.Вам придется поработать с дизайном существующего класса / функции, который может варьироваться.

...