Sto cercando di implementare i proxy dinamici in PHP e sto incontrando un problema di implementazione delle interfacce.
Il mio attuale approccio alla creazione di un proxy dinamico è quello di avere una classe che usa il metodo magico __call. Il problema è che questa classe non implementa alcuna interfaccia e / o non estende altre classi. Quindi, se ho un metodo che accetta solo oggetti di un certo tipo tramite hint di tipo PHP, non posso passare un oggetto del mio tipo di proxy dinamico.
Un caso al quale sto attualmente lavorando è una classe LazyLoader, che controlla il metodo che viene chiamato per vedere se deve eseguire la procedura di caricamento. Il metodo della mia fonte di dati per caricare un utente, invece di restituire un oggetto Utente, restituisce un oggetto LazyLoader, che caricherà pigramente la lista di amici dell'utente. Molti altri metodi di origine dati faranno cose simili. Il problema è che, lì, restituisco un oggetto LazyLoader e non un oggetto User. Quindi, ogni volta che utilizzo un oggetto di origine dati per caricare un oggetto Utente, tornerò su un oggetto LazyLoader, che non posso passare a metodi / funzioni che accettano un parametro User di tipo suggerito.
Un modo per rendere dinamicamente un oggetto LazyLoader "essere un" Utente?
Modifica: potrei creare diversi tipi di caricatori pigri che estendono la classe giusta. Ad esempio, potrei avere un UserLazyLoader, un FinanceSheetLazyLoader e così via. Questa è una possibilità, ma mi piacerebbe vedere se potessi risolvere questo problema in un modo più generico.