Volání služby ve vlastní třídě

Hubert
Člen | 8
+
0
-

Dobrý den,
mám dotaz ohledně volání služeb. Mám dvě třídy – Store a StoreCardsMapper( vrací mi objekty z DB).
Je možné volat ve třídě Store v metodě getStoreCards službu StoreCardsMapper abych se vyhnul vytváření nového objektu StoreCardsMapper a nutnosti předávat mu $connection?

<?php
. . .
services:
    - App\Mappers\StoreCardsMapper
?>
<?php
class StoreCardsMapper {

    private $connection;

    public function __construct(\Dibi\Connection $connection) {
        $this->connection = $connection;
    }


     public function getStoreCardsByStore($storeID){
        . . .
        return $storeCards;
    }

}
?>
<?php
class Store {

    private $id;
    private $name;
    private $addressID;
    private $storeCardsMapper;

    public function __construct($id = null, $name = null, $addressID = null){
        $this->id = $id;
        $this->name = $name;
        $this->addressID = $addressID;
        $this->storeCardsMapper = null;
    }

    public function getStoreCards(){
            if(is_null($this->storeCardsMapper)){
                $connection = ...
                $this->storeCardsMapper = new StoreCardsMapper($connection);
            }
            return $this->storeCardsMapper->getStoreCardsByStore($this->id);
    }
}
?>
CZechBoY
Člen | 3608
+
0
-

Ta trida Store je jen prepravka, ne? Tzn. ji vytvaris rucne v tom mapperu? Tak muzes si mapper predat v konstruktoru (povinna zavislost) nebo setterem (nepovinna zavislost).

Hubert
Člen | 8
+
0
-

CZechBoY napsal(a):

Ta trida Store je jen prepravka, ne? Tzn. ji vytvaris rucne v tom mapperu? Tak muzes si mapper predat v konstruktoru (povinna zavislost) nebo setterem (nepovinna zavislost).

Objekt Store mi zase vrací StoreMapper(pokud nevytvářím nový sklad). Když je StoreCardsMapper součást objektu Store, znamenalo by to, že bych musel(konstruktorem, nebo setterem) při každém vytvoření instance Store předávat i službu StoreCardsMapper i v případě, kdy třeba StoreCardMapper ani nepoužiju… proto jsem ho chtěl volat jako službu až v případě volání metody getStoreCardsByStore.