Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Konstruktor
Forum PHP.pl > Forum > Przedszkole
robertoniko98
Witam,
jestestem poczatkującym programistą i uczę sie Symfony. Mam pytanie dotyczące konstruktora. Jeśli do własnej klasy dodałem np logger i wygląda to tak:

use #klasa loggujaca;
  1. class MyClass
  2. {
  3. private $logger;
  4.  
  5. public function __construct(Logger $logger)
  6. {
  7. $this->logger = logger;
  8. }
  9.  
  10. public function doSth()
  11. {
  12. $this->logger->info('test');
  13. }
  14. }

To jesli chcę wywołać MyClass to jedynym rozwiązaniem jest $logger = new \klasaLoggera; $mojaklasa = new \MyClass; $mojaklasa->doSth(); Czy jest jakiś inny prostszy sposób żeby logger był używany "domyślny" bez tworzenia jego instancji;
nospor
Skorzystaj z serwisow (services) w symfony. Tam tworzysz definicje klas i ich parametrow i zautomatu tworza ci sie obiekty z ich zaleznosciami.
LowiczakPL
Cytat(robertoniko98 @ 26.01.2020, 13:44:52 ) *
To jesli chcę wywołać MyClass to jedynym rozwiązaniem jest $logger = new \klasaLoggera; $mojaklasa = new \MyClass; $mojaklasa->doSth(); Czy jest jakiś inny prostszy sposób żeby logger był używany "domyślny" bez tworzenia jego instancji;


Jeśli zrobisz sobie serwis o którym pisze nospor to tam gdzie potrzebujesz loggera wstrzykujesz go czy to w kontrolerze czy to w innym serwisie a instancja klasy robi się automatycznie.

W kontrolerze wstrzykujesz logger w konkretnej metodzie przykładowo tak

  1. public function nazwaMetody(LoggerService $logger)
  2. {
  3. $logger->info('test');
  4. }


Natomiast w innym serwisie wstrzykujesz logger w kontrolerze.

  1. public function __construct(LoggerService $logger)
  2. {
  3. $this->logger = logger;
  4. }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.