devo gettare un'eccezione dal costruttore?

43

So che posso lanciare un'eccezione dal costruttore in PHP, ma dovrei farlo? Ad esempio, se il valore di un parametro non è quello che mi aspettavo.

O dovrei differire lanciando un'eccezione finché non viene richiamato un metodo. Quali sono i vantaggi e gli svantaggi in entrambi i casi?

    
posta WordsWorth 29.02.2012 - 11:55
fonte

5 risposte

73

Perché dovresti rimandare l'eccezione?

Se sai che l'oggetto non può istanziare correttamente con i parametri dati, allora dovresti assolutamente lanciare un'eccezione.

Altrimenti, qualcuno potrebbe testare il tuo oggetto per null, che non sarà, e potrebbe presumere che tutto sia andato come previsto.

Ci sono molte cose che possono essere fatte al tuo oggetto senza chiamare un metodo su di esso: potrebbe essere aggiunto a un elenco, potrebbe essere confrontato, potrebbe essere inviato come parametro, ecc ecc. ecc. Tutto queste sono cose che non dovrebbero essere accadute, considerando che non è un oggetto valido.

    
risposta data 29.02.2012 - 11:59
fonte
21

Se il tuo costruttore è invocato con parametri errati, dovresti (devi?) lanciare un'eccezione. Se non lo fai, potresti ottenere un oggetto cattivo che non si comporterà come previsto.

    
risposta data 29.02.2012 - 11:58
fonte
17

Assolutamente !!

Dovresti lanciare l'eccezione se i parametri per la costruzione dell'oggetto non sono validi o non conformi al contratto. Non è una buona idea andare avanti con il flusso sapendo che l'oggetto è costruito con dati errati che possono causare molti problemi se permetti al chiamante di andare avanti.

È sempre meglio "NON RAPIDAMENTE VELOCARE E GUARDARE IN ANTICIPO"

    
risposta data 29.02.2012 - 16:30
fonte
7

I know I can throw exception from constructor in PHP but should I do it?

Questo è l'unico modo sensato per informare che la costruzione dell'oggetto è fallita.

    
risposta data 29.02.2012 - 20:32
fonte
2

Perché non dovresti convalidare il set di parametri prima di istanziare il tuo oggetto? In questo modo verrebbe garantito che il tuo oggetto venga creato, eliminando in tal modo gli effetti collaterali che potrebbero verificarsi a seguito del suo errore.

Anche se so che puoi controllare le cose nel tuo costruttore e lanciare eccezioni, preferisco scrivere i miei costruttori in modo tale che non falliscano. Eseguo la validazione dei parametri prima di istanziare oggetti che posso quindi lanciare eccezioni senza che i miei costruttori falliscano. Inoltre, in genere non provo ad istanziare nuovi oggetti nei miei costruttori, scegliendo invece di istanziarli come ne ho bisogno.

Solo la mia opinione. PHP offre molta libertà: buon divertimento!

    
risposta data 17.04.2013 - 15:49
fonte

Leggi altre domande sui tag