Programm 3 (objektorientiert)

4.2.3.2 PHP-Programm


Datei p03.php
(praktisch identisch mit den Programmen 1 und 2 - siehe Kap.4.2.1.2 und Kap.4.2.2.2)
<!doctype html> <!-- Programm "p03.php" --> <html> <head> <meta charset="iso-8859-1" /> <meta name="author" content="Beringer Alfred" /> <meta name="description" content="Programmieren mit PHP 5" /> <title>Programm 3 (objektorientiert)</title> </head> <body> <pre>
<?php // Pfad zum privaten Projektverzeichnis (siehe Kap.16.1.2) require_once "projektpfad.inc.php"; require_once PFAD . "ooSkripte/daoKlassen/LesenSchueler1.class.php"; require_once PFAD . "ooSkripte/daoKlassen/AusgebenP03.class.php"; // Der Einfachheit halber wird der Dateiname mit dem Pfad fix vorgegeben $EINGABEDATEI = PFAD . "Dateien/vormerk.dat"; // ***************************************************************************** $edaten = new LesenSchueler1(); $ausgabe = new AusgebenP03(); $edaten->oeffnen($EINGABEDATEI); $edaten->lesen(); while (!$edaten->getEof()) { $ausgabe->setSchueler($edaten->getSchueler()); $ausgabe->schreibenZeile(); $edaten->lesen(); } $edaten->schliessen(); // ***************************************************************************** ?>
</pre> <p> </p><hr /><p> </p> <footer> <address id="ende"> Copyright &#169; 2009<br /> Letzte Aktualisierung: 2013-10-30<br /> Beringer Alfred<br /> Wögerer Wolfgang </address> </footer> </body> </html>


Datei Schueler1.class.php
<?php class Schueler1 { private $fn; // string 20 private $vn; // string 10 private $g; // char private $gd; // string 8 private $rel; // string 2 private $st; // string 3 private $kl; // string 5 private $plz; // string 4 private $ort; // string 12 private $str; // string 15 // ----- public function getFn() { return $this->fn; } public function setFn($fn) { $this->fn = $fn; } // ----- public function getVn() { return $this->vn; } public function setVn($vn) { $this->vn = $vn; } // ----- public function getG() { return $this->g; } public function setG($g) { $this->g = $g; } // ----- public function getGd() { return $this->gd; } public function setGd($gd) { $this->gd = $gd; } // ----- public function getRel() { return $this->rel; } public function setRel($rel) { $this->rel = $rel; } // ----- public function getSt() { return $this->st; } public function setSt($st) { $this->st = $st; } // ----- public function getKl() { return $this->kl; } public function setKl($kl) { $this->kl = $kl; } // ----- public function getPlz() { return $this->plz; } public function setPlz($plz) { $this->plz = $plz; } // ----- public function getOrt() { return $this->ort; } public function setOrt($ort) { $this->ort = $ort; } // ----- public function getStr() { return $this->str; } public function setStr($str) { $this->str = $str; } // ------------------------------------------------------------------------- // Magische Methode '__toString' public function __toString() { return "Name = " . $this->fn . " " . $this->vn . "\n" . " Geschlecht = " . $this->g . "\n" . " Geburtsdatum = " . $this->gd . "\n" . " Klasse = " . $this->kl; } } ?>


Datei LesenSchueler1.class.php
<?php require_once PFAD . "ooSkripte/modelKlassen/Schueler1.class.php"; class LesenSchueler1 { // Länge eines Datensatzes const SATZLAENGE = 80; // Längen der Datenfelder eines Datensatzes (entsprechend der Reihenfolge der Datenfelder im Datensatz) private static $FELDLAENGE = array("fn" =>20, "vn" =>10, "g" => 1, "gd" => 8, "rel"=> 2, "st" => 3, "kl" => 5, "plz"=> 4, "ort"=>12, "str"=>15); // Datenobjekt für die zu lesenden Daten private $schueler; // Verbindungsobjekt zur Datei private $datei; private $eof = FALSE; public function getSchueler() { return $this->schueler; } public function getEof() { return $this->eof; } public function oeffnen($dateiname) { $this->datei = fopen($dateiname, "rb") or die("<p>Die Datei <b>$dateiname</b> existiert nicht.</p>"); } public function lesen() { // Objekt für Datensatz instanzieren $this->schueler = new Schueler(); // Datensatz lesen $datensatz = fread($this->datei, self::SATZLAENGE); if (feof($this->datei)) { $this->eof = TRUE; return; } $this->aufbereitenDatensatz($datensatz); } /* Diese Methode bereitet einen Datensatz auf, in dem alle Attribute eines Schülerobjekts nebeneinander ohne Abstand gespeichert sind. Alle Attribute haben eine fixe Länge. Die Attribute werden (entsprechend dem Satzaufbau) der Reihe nach aus dem Datensatz extrahiert. */ private function aufbereitenDatensatz($datensatz) { $offset = 0; $this->schueler->setFn( substr($datensatz, $offset, self::$FELDLAENGE["fn"])); $offset += self::$FELDLAENGE["fn"]; $this->schueler->setVn( substr($datensatz, $offset, self::$FELDLAENGE["vn"])); $offset += self::$FELDLAENGE["vn"]; $this->schueler->setG( substr($datensatz, $offset, self::$FELDLAENGE["g"])); $offset += self::$FELDLAENGE["g"]; $this->schueler->setGd( substr($datensatz, $offset, self::$FELDLAENGE["gd"])); $offset += self::$FELDLAENGE["gd"]; $this->schueler->setRel(substr($datensatz, $offset, self::$FELDLAENGE["rel"])); $offset += self::$FELDLAENGE["rel"]; $this->schueler->setSt( substr($datensatz, $offset, self::$FELDLAENGE["st"])); $offset += self::$FELDLAENGE["st"]; $this->schueler->setKl( substr($datensatz, $offset, self::$FELDLAENGE["kl"])); $offset += self::$FELDLAENGE["kl"]; $this->schueler->setPlz(substr($datensatz, $offset, self::$FELDLAENGE["plz"])); $offset += self::$FELDLAENGE["plz"]; $this->schueler->setOrt(substr($datensatz, $offset, self::$FELDLAENGE["ort"])); $offset += self::$FELDLAENGE["ort"]; $this->schueler->setStr(substr($datensatz, $offset, self::$FELDLAENGE["str"])); } public function schliessen() { fclose($this->datei); } } ?>


Die nachfolgende Schnittstelle beinhaltet die Konstanten 'NEUESEITE' und 'LEERZEILE', die einen Seitenvorschub bzw. eine Leerzeile simulieren (siehe auch Kap.3.2.3.2. Diese Schnittstelle für die Ausgabesteuerung kann in jeder Listausgabe-Klasse implementiert werden:

Datei IAusgabesteuerung.interface.php
<?php interface IAusgabesteuerung { const NEUESEITE = "<p><hr /></p><p></p>"; const LEERZEILE = "<br />"; } ?>


Datei AusgebenP03.class.php
<?php require_once PFAD . "ooSkripte/daoKlassen/IAusgabesteuerung.interface.php"; require_once PFAD . "ooSkripte/modelKlassen/Schueler1.class.php"; class AusgebenP03 implements IAusgabesteuerung { const UEBER = " <strong>FAMILIENNAME VORNAME GEBURTSDATUM</strong><br />"; const F_AB = " %s %s %s<br />"; const ZZG = 20; // Programmparameter (der Einfachheit halber fix vorgegeben): private static $VG = "M"; // Datenobjekt für die auszugebenden Daten private $schueler; // Datenfelder für Ausgabebereich private $fn; private $vn; private $gd; // Zeilenzähler private $zz; public function __construct() { $this->zz = self::ZZG; } public function setSchueler(Schueler1 $schueler) { $this->schueler = $schueler; } public function schreibenZeile() { $this->aufbereitenDaten(); if ($this->zz >= self::ZZG) { printf(self::NEUESEITE); printf(self::UEBER); printf(self::LEERZEILE); $this->zz = 2; } printf(self::F_AB, $this->fn, $this->vn, $this->gd); $this->zz = $this->zz + 1; } private function aufbereitenDaten() { $this->fn = $this->schueler->getFn(); $this->vn = $this->schueler->getVn(); if ($this->schueler->getG() == self::$VG) { $this->gd = $this->schueler->getGd(); } else { $this->gd = str_pad("", strlen($this->schueler->getGd())); } } } ?>


Include-Datei projektpfad.class.php ... siehe Kapitel 16.2.



Weiter zu
Kapitel 8.7.1 - Demo-Programm (Werte- und Referenztypen)
Kapitel 9.1.4 - Demo-Programm (Parameterübergabe)
Kapitel 14.2 - Beispiel mit Datenerfassung (Dateien, objektorientiert)
Kapitel 15.1.1 - SQL-Skript
Kapitel 15.2 - Einführende Beispiele (Datenbanken, prozedural)
Kapitel 15.3 - Beispiel mit Datenerfassung (Datenbanken, objektorientiert)
Kapitel 16.1.2 - Projektpfad - Include-Datei "projektpfad.inc.php"
Zurück
zum Anfang dieses Kapitels
zu Kapitel 3.2.1.2 - Programm 1 (prozedural)
zu Kapitel 3.2.2.2 - Programm 2 (prozedural)
zu Kapitel 3.2.3.2 - Programm 3 (prozedural)
zu Kapitel 4.2.1.2 - Programm 1 (objektorientiert)
zu Kapitel 4.2.2.2 - Programm 2 (objektorientiert)
zum Inhaltsverzeichnis