我不相信这是可能的,而且在Google上搜索并没有产生任何结果,但我认为这样做绝对不会伤害。
我试图通过PHP库在我的网站上实施Google Chart。我发现我非常喜欢的库(googlechartphplib)对于每种类型的图表都有大约10个不同的类文件。这意味着为了创建饼图,我必须使用$chart = new GooglePieChart();
而要创建QR码,我必须使用$chart = new GoogleQRCode();
等。
然而,当我真正研究使用API时,我注意到图表的类型被传递给构造函数(它被保存,然后作为查询字符串的一部分传递给API)。例如,制作折线图的代码不仅仅是$chart = new GoogleChart();
,而是$chart = new GoogleChart('lc', 500, 200);
(其中lc
定义了"折线图" ,500和200是尺寸)
这让我想到:为什么我不能阅读第一个参数来确定要创建哪种类型的图表?有一个通用构造函数:
$piechart = new GoogleChart('pie');
$linechart = new GoogleChart('lc');
$qrcode = new GoogleChart('qr');
...
我可以想办法在我的所有函数调用中使用switch / case语句来实现这一点。例如:
public function computeQuery() {
switch( $this->type ) {
case 'qr':
/* QR code function */
break;
case 'pie':
/* Pie chart function */
break;
case 'lc':
default:
/* line chart code */
break;
}
然而,这将涉及重写已经存在的所有代码(由于我能够复制/粘贴90%的代码而略微加快)。有没有办法简单地根据构造函数参数选择结果对象应该是哪个类?例如:
public function __construct($type, $x, $y) {
$this->type = $type;
switch( $type ) {
case 'qr':
return new GoogleQRCode($x, $y);
case 'pie':
return new GooglePieChart($x, $y);
case 'lc':
default:
$this->width = $x;
$this->height = $y;
}
}