Quando dovrei passare il valore di impostazione come variabile di classe 'e quando come associato. array?

2

Dopo la mia altra domanda , c'è una regola generale, quando dovremmo passare un setting come valore, che controlla il comportamento della classe (ad esempio i testi visualizzati) come costante o variabile di classe, uno per uno, e quando è meglio "comprimerli" in un array associativo? O è solo una scelta dello sviluppatore?

Ad esempio: questo approccio è migliore (codice PHP):

class SomeClass
{
    public $errorIncorrectProtocol = 'Please, don't use GET protocol in this context!';
    public $errorMissingId = 'The ID can't be empty or equal zero...';
}

di questo:

class SomeClass
{
    public $errorMessages = array
    (
        'IncorrectProtocol'=>'Please, don't use GET protocol in this context!',
        'MissingId'=>'The ID can't be empty or equal zero...'
    );
}

e se sì - allora, perché?

    
posta trejder 24.02.2014 - 13:18
fonte

1 risposta

2

Una buona pratica qui (almeno in PHP) è usare una combinazione di costanti e array. Per seguire l'esempio dei messaggi di errore:

class SomeClass {
    const ERR_INCORRECT_PROTOCOL = "incorrectProtocol";
    const ERR_MISSING_ID = "missingId";

    public $errorMessages = array(
        self::ERR_INCORRECT_PROTOCOL => "Please, don't use GET protocol in this context!",
        self::ERR_MISSING_ID => "The ID can't be empty or equal zero..."
    );
}

I messaggi di errore possono quindi essere recuperati facilmente:

$someObj = new SomeClass();
$someObj->errorMessages[SomeClass::ERR_INCORRECT_PROTOCOL];

In generale, non penso che avere variabili individuali in questo contesto forniscano vantaggi sull'utilizzo di costanti e matrici. Invece, ingombra semplicemente le parti interne della classe, o peggio (se sono esposte pubblicamente) ingombra la tua API e forse confonde gli sviluppatori (cos'è questo errorMissingId ? È un errore oggetto? Una stringa? È sicuro cambiare? Ne ho bisogno?)

    
risposta data 24.02.2014 - 13:29
fonte

Leggi altre domande sui tag