Miron941
@Miron941

Как создать фабрику через магический метод?

У меня есть фабричный класс и объектный класс. Я использую метод createTest и создаю 5 объектов в массиве. Как создать его магическим методом Call() ? Я хочу создавать новые объекты и передавать их на фабрику не создавая при этом новый метод код каждый класс
class Test 
{
privat $id;
}
class Pull 
{
public function createTest($count)
 {
    $storage = [];
     while ($count--) {
     $storage = new Test();
}
  }
return $storage;
}
$pool = new Pool();
print_r($pool->createTest(5));

626fab5b7bfce998454913.png
В картинке я подкрепил свой вывод. Фабрика создает количество обьектов которое мы задаем.
print_r($pool->createTest(5));
//example я создаю обьекты Test2, Test3, Test10 и передаю их через фабрику. Фабрика должна подстроится сама.
// В результате у меня массив с клонами обьекта как на фото. Количество мы указываем в скобках. 
print_r($pool->createTest2(2));
print_r($pool->createTest3(7));


Вопрос, я хочу передавать в фабрику обьекты, не создавая новый метод под каждый обьект. А через магический метод Сall()
  • Вопрос задан
  • 90 просмотров
Пригласить эксперта
Ответы на вопрос 1
vitaly_74
@vitaly_74
метод call насколько я помню нужен, чтобы вызывать "специфические функции" по сути его иногда можно использовать как фабрику:
__call($name, $params){
   if($name === 'createTest'){
      return $this->createTest();
   }
   if($name === 'createProduction'){
      return $this->otherMethod();
   }
}

Обычно в фабриках используются конструкции switch case но мне было лень ее писать.
также в методе call можно возвращать новые объекты например:
__call($name, $params){
   if($name === 'createTest'){
     $storage = [];
    $count = $params['count'];
     while ($count--) {
     $storage[] = new Test();
     }
      return  $storage;
   }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы