Sono relativamente nuovo al design di classe e ho un compito che non sono sicuro del modo migliore per completare, o se la mia idea in generale è un odore di codice.
Sto sviluppando un gioco di ruolo in cui le persone possono possedere mostri, quindi ognuno è un'istanza di oggetto della classe Monster. Dato che lo sprite di un mostro cambia a seconda di diversi fattori, la classe Monster ha un metodo per disegnare lo sprite che chiamo che fa tutti i controlli e la logica e visualizza lo sprite corretto usando le proprietà dell'oggetto e io lo chiamo come:
$Monster->drawSprite();
Questo metodo esegue controlli usando altri metodi di classe, come
$this->isHoldingItem();
che controlla i dati dal database utilizzando un ID mostro univoco (una proprietà di classe) e memorizzato come proprietà dell'oggetto.
Ogni tanto per la storia e in altri luoghi, voglio disegnare uno sprite mostro che non è in realtà di proprietà di nessuno, quindi non ha istanze di righe o istanze di database. Piuttosto che codificare l'URL dell'immagine o duplicare il mio codice, esiste un modo in cui un metodo può essere chiamato sia come parte di un'istanza sia staticamente e risponde di conseguenza? Questa è anche una buona idea?
Quindi nella mia testa potrei fare:
$Monster->drawSprite();
Questo userà le proprietà dell'istanza per determinare tutta la logica necessaria per visualizzare lo sprite, oppure potrei fare:
Monster::drawSprite();
Disegnare un mostro sprite senza fare affidamento sulle proprietà della classe. Forse potrei passare un array come argomento per tutti i controlli necessari sulle proprietà degli oggetti su cui solitamente si basa il metodo.
Immagino di poter fare qualcosa usando func_get_args () o molti condizionali, ma ho visto che si trasformava rapidamente in spaghetti code. È una buona idea, o è addirittura possibile? Mi riferisco specificamente a PHP con questa domanda.