Was sollte eine GD-Klasse können?

Irgendjemand_1

Erfahrenes Mitglied
Hallo.
Ich hab mir überlegt, dass ich mal wieder bock habe, etwas mit GD zu machen.
Und dann hab ich mir gedacht, dass ich nebenher auch gleich noch meine OOP-Skills verbessern könnte. Eine GD-Klasse liegt da nah ;)

Nur weiß ich grad nicht, was die beinhalten soll?
Eine Vereinfachung der Benutzung der GD-Funktionen (wie zB in einer SQL-Klasse) hat ja nicht wirklich Sinn, das ist schon idiotensicher :D
Vielleicht eine Klasse, mit der man Diagramme oder sonstige Konstruktionen erstellen kann? Was meint ihr?

Wenn jemandem gerade besonders langweilig ist, kann er mir ja gleich eine Struktur der Klasse geben, so wie er das sich vorstellt (also die Methoden der Klasse ohne den Code).
Danke schonmal für eure sicherlich kreativen Einfälle ;)
 
Vielleicht eine Klasse mit der man diverse statistikbezogenen Grafiken, wie z.B. das bereits genannte Tortendiagramm, oder auch Balkendiagramme erstellen kann.
 
Graphen sind auch eine gute Idee, stimmt ;) Hab ich gar nicht dran gedacht.

Graphen und Diagramme machen sich immer gut.
Nehmen wir mal als Beispiel ein Tortendiagramm. Was sollte man alles einstellen können? die Ausmaße des Diagrammes, die Farben, Die Höhe und natürlich die Daten (vielleicht mit beschriftung?). Hab ich was vergessen?

Und wie würdet ihr die Struktur der Klasse machen?
Für jedes Diagramm/jeden Graph eine funktion? Oder sollten noch irgendwie Subclasses rein? Ich hab zwar die OOP-Grundsätze verstanden, mir fehlt aber irgendwie die Erfahrung damit.
 
Du solltest die Moeglichkeit bieten eine beliebige Anzahl an numerischen Werten hinzuzufuegen, am besten wohl ueber eine Methode addvalue($value,$description='')
$description='' damit keine Beschreibung noetig, aber eben moeglich ist.
Und dann eben Methoden zur Erzeugung der einzelnen Grafiken. Diese sollten am besten auch die Moeglichkeit bieten zu waehlen ob die Grafik gespeichert oder ausgegeben werden soll.
Am besten wie es z.B. bei imagejpeg() der Fall ist mit dem optionalen 2. Parameter.
 
Ok, also dann mach ich einfach für jedes Diagramm eine Methode.
pie_chart();
line_chart();
bar_chart();
... Öhm - Was noch?

Edit: Natürlich die von dir angesprochene addvalue-Funktion, einen Konstruktor, der unter anderem die Auswahl zum Speichern enthält.
 
Zuletzt bearbeitet:
Struktur der Klasse: genau das ist der "schwere bzw. eigentliche Teil" der Arbeit... das wollen wir dir doch nicht abnehmen ;-)

ich würde mir jetzt an deiner stelle einen stapel zettel und ein paar stifte holen und mal skizzieren und losüberlegen...

Was mir dabei grad so durch den kopf geht...
  • was will ich am schluss haben?
    --> Allgemein: einen Graphen. Speziell: einen Tortengraphen
  • was will ich am anfang als Ausgangspunkt haben?
    --> Allgemein: eine tabelle mit Werten, Speziell: Eine einfache "wert-name"-"prozent-wert"-zuordnung plus titel und beschreibung für die grafik (inhaltliche bedeutung)
  • Wie will ich als "einfacher Klassenbenutzer" die Klasse benutzen können?
    --> zum Beispiel:
PHP:
$torte = new Tortengraph();
$v = array('flaschen' => 0.3, 'dosen' => 0.6, 'sonstige' => 0.1);
$torte->setValues($v);
$torte->setHeadline('Flaschenpopulation am Abgrund');
$torte->setColor('#000000'); /* Konfigurationseinstellungsmöglichkeiten, wie du oben schon aufgezählt hast... */
$torte->paint();
  • Ich brauche also eine Klasse Tortengraph() und ein paar Funktionen darin
    --> Welche Funktionen brauch ich genauso bei einem Stabdiagramm?
    --> Tortengraph extends Graph und Graph enthält "allgemein genutzte" Funktionen
Nuja, das ist mir jetz so durch den Kopf.. wenn ich nochmal drüber lese, würd ichs schon wieder ein bischen anders machen ;-)


Sorry für die etwas verplante antwort, vielleicht hilft sie ja trotzdem...
 
Also für jedes Diagramm eine Subklasse - Das leuchtet mir ein :)
Ich denke von der Struktur her werde ich das schon irgendwie halbwegs sinnvoll hinbekommen :) Da sind ja relativ viele Freiheiten gegeben.

Btw: Kann man eigentlich in dem Header eines Bildes Daten speichern? Mir geht es jetzt speziell darum das Objekt zu speichern, dann könnte man das Diagramm später nochmal mit der Klasse nachbearbeiten, ohne es neu erstellen zu müssen. Das könnte zum Beispiel praktisch sein, wenn man nur eine einzige Information ändern will, oder zB. das Copyright nachträglich entfernen/hinzufügen will.
 
Naja, wenn du sämtliche Input-Daten speicherst, kannst du die Grafik jederzeit neu generieren lassen... und somit auch nachträglich verändern.
Wenn du die Grafik dann als jpg oder so speicherst.. naja, dann hast du halt ne bild-datei, und mit der kannst du machen, was du mit jeder anderen auch machen kannst.

oder hab ich dich jetzt missverstanden?

[stream-of-thoughts-on]
Man könnte es auch andersrum aufrufen lassen...
PHP:
class Graph {
  var $graph; /* graph-class-handler */
  function Graph($type) {
    if (class_exists($type)) $this->graph = new $type();
    else echo 'Den graphentyp gibets ned!';
  }
}
class torte {
  ...
}
$torte = new Graph('torte');
Hm, war nur grad so ne Idee... musst man abwägen, welche Methode evtl. Vor- oder Nachteile hat.. wobei der unterschied ja ned so groß is ;-)
[stream-of-thoughts-off]
 
Bailor hat gesagt.:
Naja, wenn du sämtliche Input-Daten speicherst, kannst du die Grafik jederzeit neu generieren lassen... und somit auch nachträglich verändern.
Wenn du die Grafik dann als jpg oder so speicherst.. naja, dann hast du halt ne bild-datei, und mit der kannst du machen, was du mit jeder anderen auch machen kannst.

oder hab ich dich jetzt missverstanden?
Schon ok ... Nicht so wichtig ;) Was ich machen wollte, war halt, dass man aus der jpg Datei selbst wieder das Objekt herstellen kann, um dieses zu verändert. Aber wenn man sich die Datei, die das Bild generiert hat einfach speichert, kann man das Bild ja auch wieder verändern.
Bailor hat gesagt.:
[stream-of-thoughts-on]
Man könnte es auch andersrum aufrufen lassen...
PHP:
class Graph {
  var $graph; /* graph-class-handler */
  function Graph($type) {
    if (class_exists($type)) $this->graph = new $type();
    else echo 'Den graphentyp gibets ned!';
  }
}
class torte {
  ...
}
$torte = new Graph('torte');
Hm, war nur grad so ne Idee... musst man abwägen, welche Methode evtl. Vor- oder Nachteile hat.. wobei der unterschied ja ned so groß is ;-)
[stream-of-thoughts-off]
Wie meinst du das?
 
Zurück