【发布时间】:2011-10-20 17:16:16
【问题描述】:
我不相信这是可能的,并且在 Google 上搜索并没有产生任何结果,但我认为询问并没有什么坏处。
我正在尝试通过 PHP 库在我的网站上实现 Google Chart。我发现我非常喜欢的一个库 (googlechartphplib) 为每种类型的图表提供了大约 10 个不同的类文件。这意味着要创建饼图,我必须使用$chart = new GooglePieChart();,而要创建二维码,我必须使用$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;
}
}
【问题讨论】:
标签: php oop constructor