¿Cómo evitar la inyección de dependencia cíclica en php?

Puedo tener dos clases que estén en el mismo nivel, por ejemplo en una capa de servicio o dominio. Para que cada uno de ellos funcione, es posible que deba consultar la otra clase.

Por ejemplo:

class User
{
    public function __construct(
        protected Phone $phone
    ) {
    }

    public function getPhone()
    {
        return $this->phone->number;
    }
}

class Phone 
{
    public function __construct(
        protected User $user
    ) {
    }

    public function getUser()
    {
        return $this->user->name;
    }
}

Y aquí hay una inyección de dependencia cíclica. ¿Qué tengo que hacer?

Answer

puede usar este repositorio git, esta es la implementación parcial del marco de inyección de dependencia GUICE de Java que introdujo el problema de las inyecciones de dependencia. Además, si desea manejarlo usted mismo, según este artículo, necesita una tercera clase como se muestra a continuación:

class C {
   C(){}
}

class A {
   final C c;
   A(C c){ this.c = c;}
}

class B {
   final A a;
   final C c;
   B(A a, C c){ this.a = a; this.c = c; }
}