Hallo Rolf,
wenn Du innerhalb der Methoden Header und Footer auf die Variable $ID zugreifst, machst Du was falsch. Greifst Du mit dem global-Statement darauf zu? Oder verwendest Du $_GET['ID']?
global. Und das nicht nur mit der $ID, sondern mit weiteren 24 Variablen. 😕 Wußte nicht, daß das falsch ist. Und bei einer weiteren Durchsicht sind 20/24 unnötigerweise als global deklariert, weil sie sich durch Datenbankabfragen erst ergeben.
Wenn Du innerhalb der Header und Footer Methoden die ID brauchst, solltest Du deiner PDF_Table_Header Klasse eine neue Eigenschaft namens
id
verpassen. Um nicht auch noch einen Konstruktor schreiben zu müssen, kannst Du diese Eigenschaft einfach public machen.
Ja, wenn denn nur die ID wäre. Aber wenn ich Dich richtig verstanden habe, könnte ich alle Variablen, die ich in der Klasse brauche, einfach auf "public" setzen? Und woher beklommt die Klasse den Inhalt? Einen Konstruktor anlegen und das Objekt dann mit Parametern erzeugen erscheint mir im Moment sogar noch etwas schlüssiger. Woher weiß die Klasse, was in $ID drin ist, wenn der Wert variiert und ich ihn nicht übergebe?
class PDF_Table_Header extends PDF_MC_Table_WA { public $id; public Header() { $this->Cell($x, $y, "Dokument $this->id"); // oder so: $this->Cell($x, $y, "Dokument " . $this->id); } public Footer() { } } ... $pdf = new PDF_Table_Header('P','mm',$seitenformat); $pdf->id = $ID; $pdf->AliasNbPages(); $pdf->AddPage();
Zur Erklärung: FPDF geht nur im einfachsten Fall so vor, dass Du das FPDF Objekt erzeugst und die PDF-Erzeugung dann komplett von außen steuerst. Für Dinge wie Seiten-Header und -Footer bietet es Dir die Möglichkeit, das FPDF Objekt zu erweitern. Das passiert mittels class ... extends. In deinem Fall erweiterst Du PDF_MC_Table, was sicherlich eine von FPDF abgeleitete Klasse ist. Woher auch immer diese Klasse kommt - im Internet finde ich dazu nur eines: Diesen Selfhtml Thread 😂.
Ich habe dir irgendwann mal aus den Addons zu fpdf genommen. Und mir dann aus mehreren eines zusammen gebastelt. Ist aber gefühlte Ewigkeiten her, damals kannte ich mich besser damit aus.
Header und Footer sind sogenannte Abstrakte Methoden. Sie sind in FPDF zwar vorhanden, tun aber nichts. FPDF ruft sie auf, wenn es an der Zeit wäre, einen Header oder einen Footer zu erzeugen. Wenn Du diese Methoden in deiner abgeleiteten Klasse einbaust, dann überschreiben sie die Dummy-Methoden, die in FPDF enthalten sind, d.h. wenn FPDF als Basisklasse von PDF_Table_Header läuft, verwendet es deinen Header und Footer.
Sehr gute Erklärung.
Da ich mehrere Scripte habe, die allesamt diese Klasse verwenden, könnte ich vielleicht wirklich die Klasse selber extrahieren und so immer über require_once einbinden. Ich hadere nur noch damit, ob lieber über public
, was ich noch nicht verstanden habe oder über einen Konstruktor, den ich zu verstehen glaube. Vielleicht auch eine Mischung aus Beidem?
Du könntest auch noch eine Methode __construct hinzufügen, um die ID gleich beim new zu setzen, aber dafür müsste ich dann zuviel OOP erklären. Darum einfach eine public Eigenschaft, und ihr wird nach dem new Aufruf (der das Objekt erzeugt) die benötigte ID zugewiesen. Auf diese Weise kennt das Objekt nun die ID und ist nicht darauf angewiesen, auf eine globale Variable zuzugreifen.
Wenn Du mir nochmal erklären könntest, woher die public Variable ihren Inhalt nimmt?
Basti