Есть ли правильный способ условного экземпляра определенных подклассов?Условно создание правильных подклассов?
Например, у меня есть класс User
, который включает в себя метод get_membership()
, который будет возвращать подкласс в зависимости от типа членства, которое он передал. В настоящее время я использую оператор switch, чтобы вернуть правильный подкласс, однако я не уверен, что это лучший подход.
Краткий пример того, что я работаю с:
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, что я думал, но не был уверен. –