2010-05-22 4 views
1

Кажется, что часто я хочу выполнить некоторые методы из класса, когда я его назову, и выбрать, какая функция будет зависеть от некоторого условия. Это заставляет меня писать классы, как в случае 1, потому что это позволяет мне быстро включить их функциональность. Альтернативой может быть случай 2, который может занять много времени, если есть много кода, а также означает, что еще один код записывается дважды, когда я бросаю класс на разные страницы.Должны ли условные выражения проходить внутри или вне классов?

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

Есть ли что-то неправильное в таких классах, как в случае 1 или в случае 2-го варианта? Или есть лучший способ? Каковы преимущества и недостатки каждого?

Случай 1

class Foo { 
    public function __construct($bar) { 
     if($bar = 'action1') $this->method1(); 
     else if($bar = 'action2') $this->method2(); 
     else $this->method1(); 
     } 

    public function method1() { } 
    public function method2() { } 
    } 

$bar = 'action1' 
$foo = new Foo($bar); 

Случай 2

class Foo { 
    public function __construct() { } 
    public function method1() { } 
    public function method2() { } 
    } 

$foo = new Foo; 
$bar = 'action1'; 
if($bar == 'action1') $foo->method1(); 
else if($bar == 'action2') $foo->method2(); 
else $foo->method1(); 

ответ

0

Если инициализация объекта требует один из методов, который будет называться, а затем вызвать один. В противном случае допустима вторая форма.