Какой из этих вариантов ООП мне следует использовать? - PullRequest
1 голос
/ 09 января 2010

У меня есть два класса ClassA и ClassB. ClassA всегда нужно имя файла шаблона, а ClassB расширяет ClassA.

В обычных случаях, когда создается экземпляр ClassB, пользователь должен указать имя файла шаблона. Как:

$classB = new ClassB('index');

Но теперь я создал ClassX, который расширяет ClassA, и когда пользователь использует ClassX, он не должен ничего указывать. Это класс, который просто создает кнопку, поэтому он сам знает, каков файл шаблона для этого.

Так что пользователь просто хочет позвонить:

$bttn = new ClassX();

и внутри конструктор ClassA вызывается с помощью button_template.

Для этого я вижу следующие варианты:

A)

public function __construct() {
    $tplName = func_get_arg(0);
    if (!isset($tplName)) {
        $tplName = 'button_template';
    }
    parent::__construct($tplName);
}

или B)

public function __construct($tplName='button_template') {
    if (!isset($tplName)) {
        $tplName = 'index';
    }
    parent::__construct($tplName);
}

или C)

public function __construct($tplName='button_template') {
    parent::__construct($tplName);
}

Какой из них лучший? А почему?

Ответы [ 3 ]

2 голосов
/ 09 января 2010

Так как я не хочу, чтобы пользователь что-то указывал, может быть, это лучшее:

(пришло мне в голову после публикации вопроса!)

D)

public function __construct() {
    parent::__construct('button_template');
}
1 голос
/ 09 января 2010

Я думаю, что это лучший способ:

#Class A:
public function __contruct($template){
  //do stuff
}

#Class X extends A
public function __contruct(){
   parent::__construct('button_template')
}

Я чувствую, что это лучший способ, потому что класс А не должен беспокоиться о том, что хочет класс С (случай А), и класс С не должен принимать ничего, кроме buton_template (случаи В и С)

0 голосов
/ 10 января 2010

C) дает пользователю возможность переопределить шаблон, D) нет. Я бы выбрал любой из них в зависимости от того, можно ли использовать только шаблон кнопки (d) или любой шаблон, но если ничего не указано, шаблон кнопки используется по умолчанию (c)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...