Solo il mio punto di vista, ma non dovresti avere più costruttori in primo luogo - il tuo costruttore sarà pieno di if/else-ladders, che in realtà non è una buona idea, soprattutto per qualcosa di leggero come una rappresentazione di un colore.
ho vivamente di provare qualcosa di simile, invece:
class Color
{
protected function __construct($r, $g, $b)
{ ... }
public static function fromHex($hex) {
return new Color(...);
}
public static function fromRGB($r, $g, $b) { ... }
public static function fromArray(array $rgb) { ... }
...
}
Ora, nel codice del consumo, invece di chiamate costruttore un po 'misterioso e ambiguo come questi:
$a = new Color(0,0,0);
$b = new Color('#000000');
Invece si può avere codice consumatore più leggibile e semantico, come questo:
$a = Color::fromRGB(0,0,0);
$b = Color::fromHex('#000000');
Questo probabilmente ha più senso per qualcuno che legge il codice del consumatore, elimina la logica necessaria per far funzionare il costruttore ambiguo e come bonus (se usi un IDE come PhpStorm) puoi passare tutte le tue ispezioni. Se si sta eseguendo un generatore di documentazione, ciò garantisce anche che tutte le opzioni siano documentate individualmente, piuttosto che raggruppate in una descrizione verbale.
Si noti che ho dichiarato il costruttore protected
- questa è una preferenza personale, ma se ho intenzione di avere più di fabbrica-metodi statici, preferisco vedere quelli costantemente utilizzati in codice del consumo, piuttosto che a volte vedere Color::fromRGB(...)
e altri tempi new Color(...)
.
userò la seconda soluzione, un param con la descrizione (che è uno a tre params e vari formati) e alcuni tag @see ad esempi. –
Questo è vecchio, ma solo per offrire un'alternativa per l'amor di riferimento - potresti anche solo dire '@param mixed $ args ... Numero variabile di argomenti che rappresentano blah blah' –