u/BirdImportant7427

Why use containers for DI when you can have a top-down approach with lazy objects (8.4+)?

I am not PHP proficient. Is there any reason to avoid manually wiring the dependency graph? Do developers use this feature? It's been almost 2 years since 8.4 released with the lazy objects feature and it's one dependency less.

Short example:

class LazyAppFactory
{
   public PgTransactor $pgTransactor;
            
   public AuthenticationRepo $authenticationRepo;
   public AuthService $authService;
   public AuthController $authController;
            
   public function __construct()
   {
      // postgres module
            
      $this->authenticationRepo = new \ReflectionClass(AuthenticationRepo::class)->newLazyGhost(function ($ghost) {
          $ghost->__construct($this->pgTransactor);
      });
            
      // service, controller modules
   }
}

And then simply use the controllers in the handler / entry point of the app.

reddit.com
u/BirdImportant7427 — 19 days ago
▲ 42 r/Roumanie+1 crossposts

Vă salut. Împreună cu un prieten am construit https://companiidestat.ro. Reprezintă o radiografie a celor 1502 companii de stat ale României. Am folosit date publice de pe data.gov.ro, amepip.gov.ro și bvb.ro.

Pe scurt:

  • Vizualizări pe date oficiale AMEPIP
  • Hartă pe județe cu distribuția companiilor pe pierdere; click pe județ deschide lista companiilor din acel județ
  • Profilul individual pentru fiecare companie cu evoluție pe ultimii 6 ani, număr angajați, membri CA și salariile lor (acolo unde acestea sunt publice)
  • Evoluția companiilor pe pierdere, pe sectoare (2019-2024)
  • Vizualizare interactivă salariu director vs performanța financiară a companiei
  • Șapte exemple pozitive de companii listate la bursă cu evoluția profitului și prețului acțiunii post-listare
  • Un scoreboard al celor 10 obligații legate de companiile de stat din "Programul de Guvernare 2025-2028"
  • Countdown PNRR până la termenul jalonului 443
  • Plus o pagină în care am explicat exact cum au fost extrase datele

Pe partea tehnică folosim vanilla js, css, un custom build de D3.js, niște scripturi de python care extrag datele din xlsx-ul AMEPIP și două pdf-uri (indemnizații + fișe de evaluare). Când AMEPIP publică un raport nou, un pipeline rulează și regenerează datele. Pentru hosting folosim momentan GitHub Pages.

Dacă aveți feedback, întrebări sau nelămuriri, vă răspundem cu drag.

u/BirdImportant7427 — 4 months ago