Domanda

Qual è il modo migliore per trattare con funzioni di "utilità" in un quadro OOP di PHP? In questo momento, non ci resta che un file con diverse funzioni che sono necessarie in tutto il sistema. (Ad esempio, una funzione distribute() che accetta un valore e un array e restituisce un array con il valore distribuito nelle stesse proporzioni e stesse chiavi come array di input.)

Mi sono sempre sentito "sporco" utilizzando tale perché non è orientato agli oggetti a tutti. E 'meglio la pratica di spostare questi in varie classi come metodi statici, o è solo una soluzione semantica? O c'è solo andando a essere un livello in un contesto in cui alcune cose sta per cadere al di fuori della struttura di programmazione orientata agli oggetti?

È stato utile?

Soluzione

Sono sempre stato più pragmatico su domande come queste.

Se si vuole andare a pieno OOP, si dovrebbe ovviamente attaccare questi in classi. Tuttavia, queste classi sono solo andando a essere classi container, perché in realtà non rappresentano oggetti di qualsiasi tipo.

Inoltre: utilizzando le classi che si richiederebbe a uno avere un'istanza di quella classe, utilizzando il pattern Singleton o dichiarando ogni funzione statica. Il primo è più lenta (va bene, potrebbe non essere più di tanto, ma in una grande cose quadro del genere ottenere grande, troppo - soprattutto in linguaggi interpretati come PHP), mentre il secondo e il terzo sono semplicemente inutili e semplicemente un involucro OOP per una serie di funzioni (in particolare il terzo approccio).

Modifica : Sentitevi liberi di smentirmi. Potrei essere. Io non sono troppo esperto e sempre visto in questo modo, ma potrei sbagliarmi.

Altri suggerimenti

Io tendo a fare una classe Util() che contiene solo metodi statici, non ha attributi, e non è ereditato da. In sostanza, agisce come un "namespace" per una serie di funzioni di utilità. Mi permetto questa classe a crescere in termini di dimensioni, ma a volte dividere dei metodi nelle proprie classi se è chiaro che questi metodi sono progettati per funzionare solo con alcuni tipi di dati o se è chiaro che un gruppo di metodi correlati dovrebbe essere raggruppati in una classe insieme, forse, alcuni attributi.

Credo che sia perfettamente OK a deviare dal puramente pratiche OOP fino a quando il codice che si discosta è ben organizzato e non è la creazione di difetti architettonici nel vostro sistema che rendono più difficile da capire e mantenere.

Io penso sempre a funzioni di utilità come estensioni delle funzioni standard di PHP. Non sono orientato agli oggetti, perché non si è davvero ottenere alcun beneficio dal fare loro OO.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top