Simplemente mi punto de vista, pero no debe tener múltiples constructores en primer lugar - su constructor estará lleno de if/else-ladders, lo cual realmente no es una buena idea, especialmente para algo ligero como una representación de un Color.
Le recomiendo a usted a intentar algo como esto en su lugar:
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) { ... }
...
}
Ahora, en el código de consumo, en lugar de llamadas al constructor un tanto misteriosos y ambiguos como éstas:
$a = new Color(0,0,0);
$b = new Color('#000000');
En su lugar puede tener código de consumidor más legible y semántico, como este:
$a = Color::fromRGB(0,0,0);
$b = Color::fromHex('#000000');
Esto probablemente tenga más sentido para alguien que lea el código del consumidor, elimina la lógica requerida para hacer que el constructor ambiguo funcione, y como una bonificación (si está usando un IDE como PhpStorm) puede hacer pasar todas sus inspecciones. Si está ejecutando un generador de documentación, esto también asegura que todas las opciones estén documentadas individualmente, en lugar de agruparse en una descripción verbal.
Tenga en cuenta que he declarado el constructor protected
- esta es una preferencia personal, pero si voy a tener varios métodos de fábrica estáticos, prefiero verlos constantemente en el código del consumidor, en lugar de ver Color::fromRGB(...)
y otros veces new Color(...)
.
voy a utilizar la segunda solución, un parámetro con la descripción (que es de uno a tres parametros y varios formatos) y algunas etiquetas @see a ejemplos. –
Esto es antiguo, pero solo para ofrecer una alternativa de referencia, también podría decir '@param mixed $ args ... Variable number of arguments que representa blah blah' –