Каким образом можно сделать меньше следующий код?
if ($a == 1) {
$obj = new Class1();
} else if ($a == 2) {
$obj = new Class2();
} else if ($a == 3) {
$obj = new Class3();
} else if ($a == 4) {
$obj = new Class4();
}
....
То есть имеется примерно 100 значений переменной $a, от значения которой каждый раз вызывается свой определенный класс.
Здравствуйте, MasterMind, Вы писали:
MM>То есть имеется примерно 100 значений переменной $a, от значения которой каждый раз вызывается свой определенный класс.
$class = "Class$a";
$obj = new $class();
... << RSDN@Home 1.2.0 alpha 5 rev. 67>>
Здравствуйте, evilbloodydemon, Вы писали:
E>Здравствуйте, MasterMind, Вы писали:
MM>>То есть имеется примерно 100 значений переменной $a, от значения которой каждый раз вызывается свой определенный класс.
E>E>$class = "Class$a";
E>$obj = new $class();
E>
Название класса не имеет в себе каких то повторяющихся наименований.
Здравствуйте, MasterMind, Вы писали:
MM>MM>if ($a == 1) {
MM> $obj = new Class1();
MM>} else if ($a == 2) {
MM> $obj = new Class2();
MM>
MM>То есть имеется примерно 100 значений переменной $a, от значения которой каждый раз вызывается свой определенный класс.
$cls = [
1 => "Class1",
2 => "Class2"
];
$obj = new $cls[$a]();
Здравствуйте, MasterMind, Вы писали:
MM>Название класса не имеет в себе каких то повторяющихся наименований.
ну тогда так:
$classMap = [
1 => 'Alpha',
3 => 'Beta',
10 => 'Gamma',
//...
];
$class = $classMap[$a];
$obj = new $class();
проверки добавить по вкусу
... << RSDN@Home 1.2.0 alpha 5 rev. 67>>
Мне кажется if -ы и/или switch..case -ы намного лучше, чем подстановка переменной вместо имения класса, при его инициализации, как советую предыдущие авторы.
Я это имею в виду:
$classMap = [
1 => 'Alpha',
3 => 'Beta',
10 => 'Gamma',
//...
];
$class = $classMap[$a];
$obj = new $class();
Потом можно намаяться с отладкой да и вообще... хлопотно это.
Мне кажется, если уж их 100 штук, надо вынести это всё в отдельный класс, в стиле фабрики, например:
final class ObjectCreator
{
public static function createByStringVar($stringVar)
{
$stringVar = (string)$stringVar;
switch($stringVar) {
case 'a':
return self::createClassA();
case 'b':
return self::createClassB();
default:
throw new Exception('Unknown class');
}
}
public static function createClassA()
{
return new classA();
}
public static function createClassB()
{
return new classB();
}
protected function __construct()
{
}
}