Rolf B: Warum wird die falsche Endsumme ausgegeben?

Beitrag lesen

Hallo Jörg,

zum Verständnis des Geschehens wäre es wohl wesentlich sinnvoller, wenn Du vor jeder Logik erstmal loggst, mit welchen Argumenten deine Funktion aufgerufen wird.

    if(!isset($arrPage)) {
        static $arrPage = [];
    }

Die Abfrage ist unnötig. PHP initialisiert eine static-Variable nur beim ersten Aufruf der Funktion.

Wenn Du Dir den $overwrite über alle Aufrufe merken willst, muss der auch static sein. Aber warte noch...

Ansonsten ist die Funktion - finde ich - Kraut und Rüben. Der Parameter $set_get ist ein drohender Unfall. Der Wert "set" addiert, entgegen seiner suggerierten Funktion. Der Wert "overwrite" setzt dagegen etwas. Und mit "get" bekommst Du einen aufsummierten Betrag über die Seiten hinweg, aber laut Plan nur dann, wenn's vorher mal einen Overwrite gab. Ansonsten kriegst Du den Wert zurück, den Du schon mitgegeben hast. Und du gibst eine $Art hinein, die Du aber gar nicht verwendest. Hä?!

Wenn Du pro Seite was aufsummieren willst, dann mach dafür eine "add" Operation (und nenn $get_set dann auch $operation oder so). Wenn Du auf der Seite was von dieser Summe abziehen willst, mach eine "sub" Operation und rechne nicht außerhalb nochmal rum. Lass "get" den Wert für die aktuelle Seite zurückgeben, sofern das überhaupt nötig ist, und für die Summe über alle Seiten mach eine "total" Operation. Ich glaube nicht, dass Du Dir dafür merken musst, ob es mal einen "overwrite" gegeben hat.

Frage ist auch, ob eine Funktion mit static-Variablen wirklich Mittel der Wahl ist. Warum keine Klasse mit Methoden add, subtract, getPage und getTotal. Davon erzeugst Du ein Objekt und rufst bei Bedarf die Methode auf. Dieses Objekt kannst Du, wenn es kompliziert ist, das herumzureichen, auch an das FPDF-Objekt anpappen. Du könntest auch eine Klasse von FPDF ableiten, um das zu managen.

Rolf

--
sumpsi - posui - obstruxi