Я не верю, что это возможно, и поиск в Google не дал никаких результатов, но я думал, что спросить никогда не повредит.
Я пытаюсь внедрить Google Chart на своем сайте черезбиблиотека PHP.Библиотека, которая мне очень понравилась ( 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;
}
}