У меня есть класс Helpers
, набор полезных функций без побочных эффектов, этот объект также зависит от Scrapper
. Проблема в том, что, если я передам этот объект через конструктор:
public function __constructor( $scrapper )
{
this->scrapper = $scrapper;
}
...
new Helpers( new Scrapper);
Каждая функция, которая использует (Obj:Scrapper) $this->scrapper
таким образом, как $this->scrapper->functionCallHere
, будет совершать вызовы объекта scrapper, который у MAYBE был свой набор состояния (внутренние переменные) другими вызовами функций в прошлом.
Давайте посмотрим, что произойдет, если Helpers
имеет две функции, которые обе зависят от Scrapper
:
public function getImages()
{
//maybe some logic.
return $this->scrapper->getImages();
}
И предположим, что мы только что назвали getImages
, теперь наш $scrapper
объект изменил свое внутреннее состояние. Предположим, что мы затем вызываем следующую функцию getComments
:
public function getComments()
{
//maybe some logic.
return $this->scrapper->getComments();
}
... она будет использовать старый $scrapper
и его состояние. В моем случае это очень, очень плохо, потому что я использую внешний пакет, который сохраняет в своем внутреннем состоянии довольно много данных о HTTP-запросах, пользовательских сеансах и т. Д. c., Поэтому случаи, когда я пытаюсь getComments
, но с параметрами, которые установлены getImages
, обязательно произойдут.
Как я могу заставить каждый вызов функции использовать новый экземпляр этого объекта-скребка без жесткого кодирования создания объекта в каждой функции, такого, чтобы зависимости не понятны? Я не хочу в конечном итоге засорять мой код этим. Короче говоря, как я могу чисто создать «зависимости функций»?
Буду честен. У меня эта проблема пахнет classi c «если у вас есть эта проблема, вы, безусловно, пытаетесь сделать что-то не то».