0
특정 하위 클래스를 조건부로 인스턴스화하는 올바른 방법이 있습니까?조건부로 올바른 하위 클래스를 인스턴스화 하시겠습니까?
예를 들어 User
클래스에는 get_membership()
메서드가 포함되어 있으며 전달되는 멤버 자격 유형을 기반으로 하위 클래스를 반환합니다. 현재 switch 문을 사용하여 올바른 하위 클래스를 반환하고 있지만 이것이 최선의 방법이라고 확신하지는 않습니다. 내가 작업 '무엇을
짧은 예 : 그것은 보통은 다른 클래스/메소드에이 논리를 분리하는 것이 좋습니다하지만 조건부 오른쪽 서브 클래스의 인스턴스를 OK입니다
class User
{
public $user_id;
public function __construct($user_id)
{
$this->user_id = $user_id;
}
public function get_membership($membership_type = 'annual')
{
switch($membership_type)
{
case 'annual':
return new AnnualMembership($this->user_id);
break;
case 'monthly':
return new MonthlyMembership($this->user_id);
break;
}
}
}
abstract class UserMembership
{
protected $user_id;
protected $length_in_days;
public function __construct($user_id)
{
$this->user_id = $user_id;
$this->setup();
}
abstract protected function get_length_in_days();
abstract protected function setup();
}
class AnnualMembership extends UserMembership
{
public function setup() {
$this->length_in_days = 365;
}
public function get_length_in_days()
{
return $this->length_in_days;
}
}
class MonthlyMembership extends UserMembership
{
public function setup() {
$this->length_in_days = 30;
}
public function get_length_in_days()
{
return $this->length_in_days;
}
}
감사합니다. @ dean-fenster, 나는 생각했지만 확실하지 않았습니다. –