Für meine PHP-Klasse habe ich somit schon einige Funktionen definiert. Erstmal den Constructor, der den gleichen Namen hat wie die Klasse. Dann habe ich eine Funktion, mit der ich Spalten hinzufügen und schließlich die Funktion, um die fertige Tabelle auszugeben.
Aber erstmal eins nach dem anderen. Ich nenne meine Klasse mal florianTabelle.
class florianTabelle {
}
Bei der ersten Funktion, die genauso wie die Klasse heißt, füge ich die Datensätze hinzu. Dabei gehe ich davon aus, dass die Datensätze Objekte sind, die sich in einem Array rows befinden. Damit ich diese aber verwenden kann, muß ich diese Variable definieren. Ich übertrage dann die Werte in die interne Variable.
class florianTabelle {
var $rows = array();
function florianTabelle ($rows) {
$this->rows = $rows
}
}
die Variable $this zeigt auf das eigene Objekt. Mit $this->wert kann ich entweder eigene Variablen oder eigenen Funktion ansprechen.
Im nächsten Schritt erstelle ich eine neue Spalte. Dazu verwende ich wieder ein Array welches die Spalten enthält. Diese Spalten sind wieder Arrays. Ich mag Arrays ;-)
Zuerst müssen wir aber wieder das Array definieren und die neuen Spalten dort eintragen. Ich übergabe dabei den Titel der Spalte, den Feldnamen und den Typ. Den Typ lasse ich optional. Wenn keiner definiert ist, wird einfach “text” verwendet.
class florianTabelle {
var $rows = array();
var $columns = array();
function florianTabelle ($rows) {
$this->rows = $rows
}
function addColumn ($title, $field, $type=”text”) {
$this->columns[] = array( “title” => $title, “field” => $field, “type” => $type );
}
}
Mit den [] hinter der Variable $this->columns sorgt dafür, dass jede Spalte als neuer Array-Wert geschrieben wird.
Und schließlich muß ich das ganze noch ausgeben. Wenn ich mit Klassen arbeite, verwende ich nur selten den echo-Befehl. Ich arbeite da grundsätzlich mit Rückgabewerten. Dadurch kann ich die Tabelle z.B. vorher noch in eine Variable übergeben und dort weiterverarbeiten. Die letzte Funktion writeTable() ist daher wie folgt aufgebaut:
class florianTabelle {
var $rows = array();
var $columns = array();
function florianTabelle ($rows) {
$this->rows = $rows
}
function addColumn ($title, $field, $type=”text”) {
$this->columns[] = array( “title” => $title, “field” => $field, “type” => $type );
}
function writeTable () {
$rv = “”;
$rv .= “<table>\n”;
$rv .= “<thead>\n”;
$rv .= “<tr>\n”;
foreach ($this->columns as $column) {
$rv .= “<th>” . $columns['title'] . “</th>\n”;
}
$rv .= “</tr>\n”;
$rv .= “</thead>\n”;
$rv .= “<tbody>\n”;
foreach ($this->rows as $row) {
$rv .= “<tr>\n”;
foreach ($this->columns as $column) {
$rv .= “<td class=\”" . $column['type'] . “\”>” . $row->$column['field'] . “</td>\n”;
}
$rv .= “</tr>\n”;
}
$rv .= “</thead>\n”;
$rv .= “</table>\n”;
return $rv;
}
}
Interessant ist forallem die Variable $row->$column['field']. Man beachte das zweite$-Zeichen nach dem Pfeil “->”. Variablen eines Objektes werden normalerweise ohne $ gechrieben. In diesem Fall weiß ich aber den Namen nicht. Der Name steht im Array $column in dem Feld mit dem Index “field”. Also wird $column['field'] z.B. in ein “id” umgewandelt. Folglich: $row->$column['field'] entspricht daher $row->id.
Und schon ist meine kleine Klasse fertig. Ich werde sie wohl in den nächsten Tagen noch etwas ausbauen. Eventuell auch um eine Möglichkeit erweitern, dass eine Sortierfunktion drin ist – oder auch eine Durchblätterfunktion ähnlich wie ich es bereits bei meiner Trainingsläufe-Tabelle gemacht habe.