2011-01-14 18 views
13

Ho alcune funzioni relative ai cookie. Sarebbe un'idea orribile raggrupparli spostandoli in una classe a parte e usarli come metodi statici?Funzioni rispetto ai metodi statici

Funzioni:

function cookie_get(){} 
function cookie_set(){} 
function cookie_delete(){} 

metodi statici:

class cookie 
{ 
    static function get(){} 
    static function set(){} 
    static function delete(){} 
} 
+2

Basta essere consapevoli dei soliti "classi statiche/single sono il nemico di unit testing" problemi che potrebbero verificarsi. –

risposta

8

Sì, sarebbe un'idea orribile perché static methods are hard to test and mock. Perché non creare una vera classe di cookie che puoi configurare in fase di esecuzione con questi metodi come metodi regolari.

Se si desidera raggruppare tali funzioni in un pacchetto, è possibile anche use Namespaces.


Edit: Dal momento che ti ha portato in su nei commenti: sì, per qualsiasi scopo di test funzioni regolari sono come non verificabile come statica. Quindi la tua situazione iniziale è "orribile" come cambiarla per usare una classe statica. Persino lo pseudo namespace non ti dà alcun vantaggio, perché lo hai già applicato alle tue normali funzioni. cookie_get è buono o cattivo come Cookie::get.

+1

+1 per aggiungere nel riferimento. Buono a sapersi. – karim79

+2

Gli spazi dei nomi troppo scarsi non sono disponibili fino al PHP 5.3. –

+0

@Emanuil [PHP 5.2 ha ufficialmente raggiunto la fine del supporto a partire dal 16 dicembre 2010] (http://www.php.net/archive/2010.php#id2010-12-16-1). [Tutti gli utenti sono invitati ad aggiornare a PHP 5.3.] (Http: //de2.php.net/migration53) – Gordon

10

Sarebbe una grande idea, a condizione che siano pienamente consapevoli della caveats involved. Questo è noto come il Utility Pattern:

Buoni candidati per classi di utilità sono metodi di convenienza che possono essere raggruppati insieme in modo funzionale.

+2

Grazie, è bello saperlo. Mi chiedo, però, perché le funzioni native di PHP non lo usano. Perché 'str_replace()' non è 'str :: replace()'? –

+3

PHP è un linguaggio procedurale, con le funzionalità di OOP aggiunte come ripensamenti. Si tratta di funzioni integrate (con convenzioni di denominazione altamente incoerenti) rispetto alle classi di helper statiche che raggruppano le funzioni correlate. – karim79

+0

@EmanuilRusev Il core API PHP è mal progettato in generale, ma soprattutto quando si tratta di spazi dei nomi perché non erano disponibili fino alla recente versione di PHP5. La forma str :: replace() sarebbe decisamente preferibile, ma dubito seriamente che qualcuno lo aggiunga retroattivamente al core in qualsiasi momento nel prossimo futuro. –

9

In realtà è buona pratica organizzare funzioni del genere. Un'alternativa moderna sarebbe quella di utilizzare un namespace.

3

Questo sarebbe un ottimo modo per organizzare il codice, ma perché utilizzare le funzioni statiche, basta creare una classe per la funzionalità richiesta.

O come detto sopra utilizzare gli spazi dei nomi, ma non ho particolare familiarità con i pro/contro di essi.

$cookie->get() è più bello da lavorare rispetto cookie_get() a mio parere

Problemi correlati