为了避免幻数和一些未来证明,我希望能够声明具有多个组成元素的单个常量或变量,以便在将来允许单个点更改值。 / p>
例如
$myPdf->setFillColor(88, 38, 123) # using this method many times in a routine.
现在,利益相关者希望更改pdf的背景颜色(在需求签署后很长时间......),因此有很多地方可以更改此rgb值。方法setFillColor($r, $g, $b)
来自第三方组件,因此我无法将方法更改为接受单个数组参数。
有没有办法声明一个单独的构造,它将解包为setFillColor()
方法的三个单独的必需参数,所以可能会出现以下内容?
$my_color = [88, 38, 123];
$myPdf->setFillColor($my_color);
答案 0 :(得分:2)
call_user_func_array([$myPdf, 'setFillColor'], MY_COLOR)
如果由于您使用的是古老版本的PHP而无法使用...
operator,您还可以使用call_user_func_array
:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<configuration>
<forkCount>5</forkCount>
<reuseForks>true</reuseForks>
<includes>
<include>**/*IT.class</include>
</includes>
</configuration>
</plugin>
对于PHP版本&lt; 7你不能将常数设置为数组,而是必须使用变量。
答案 1 :(得分:0)
你的问题有2种方法。
首先,让我向你展示一篇引自罗伯特·C·马丁的书Clean Code(第3章:函数。函数参数 - 参数对象,第43页):
当一个函数似乎需要两个或三个以上的参数时,其中一些参数可能应该包含在自己的一个类中。
正如我所看到的,您的值代表RGB颜色。为什么不把它包装成一个类?
class RGB
{
private $blue;
private $green;
private $red;
public function __construct($red , $green , $blue)
{
$this->red = $red;
$this->green = $gree;
$this->blue = $blue;
}
/** others necesary methods **/
}
只需按照您的意愿使用:
$my_color = new RGB(88, 38, 123);
$myPdf->setFillColor($my_color);
如果你需要使用其他类型的颜色系统,只需使用界面:
interface Color { }
RGB实现Color
class RGB implements Color
新的色彩系统:
class CMYK implements Color
{
private $cyan;
private $magenta;
private $yellow;
private $black;
public function __construct($cyan , $magenta , $yellow , black)
{
$this->cyan = $cyan;
$this->magenta = $magenta;
$this->yellow = $yellow;
$this->black = $black;
}
}
PDF方法只需要接受一个实现Color的类:
public function setFillColor(Color $color)
第二种方法,对面向对象不太好,但使用function argument syntax for PHP >= 5.6或call_user_func_array传递可变数量的参数。
,我不能在你的例子中推荐(出于其他目的可能是一个很好的意识形态)