Это просто моя точка зрения, но в первую очередь у вас не должно быть нескольких конструкторов - ваш конструктор будет полон лестниц if/else, что на самом деле не очень хорошая идея, особенно для чего-то легкого, такого как представление Цвет.
Я настоятельно рекомендую вам попробовать что-то вроде этого:
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) { ... }
...
}
Теперь в потребительском коде вместо несколько загадочных и неоднозначных вызовов конструктора, подобных этим:
$a = new Color(0,0,0);
$b = new Color('#000000');
Вместо этого у вас может быть более разборчивый и семантический потребительский код, например:
$a = Color::fromRGB(0,0,0);
$b = Color::fromHex('#000000');
Это, вероятно, имеет больше смысла для тех, кто читает потребительский код, он устраняет логику, необходимую для работы неоднозначного конструктора, и в качестве бонуса (если вы используете IDE, такую как PhpStorm), вы можете пройти все свои проверки. Если вы используете генератор документации, это также гарантирует, что все параметры задокументированы по отдельности, а не объединены в словесное описание.
Обратите внимание, что я объявил конструктор protected
- это личное предпочтение, но если я собираюсь иметь несколько статических фабричных методов, я предпочитаю видеть те, которые постоянно используются в потребительском коде, а не иногда видеть Color::fromRGB(...)
, а иногда new Color(...)
.
person
mindplay.dk
schedule
28.06.2013