OOP: Öffentliche Methode zu Klasse hinzu fügen

Sempervivum

Erfahrenes Mitglied
Hallo, meine Kenntnisse in OOP sind mehr oder weniger am Anfang und ich habe da ein Problem, das ich nicht lösen kann:
Ich habe da eine Bibliothek jpgraph und möchte zu einer Klasse eine protected Variable und eine öffentliche Methode hinzu fügen sowie eine private Methode ändern. Wenn ich die betr. Datei jpgraph.php einfach editiere, ist das kein Problem:
PHP:
//===================================================
// CLASS Grid
// Description: responsible for drawing grid lines in graph
//===================================================
class Grid {
    protected $img;
    protected $scale;
    protected $majorcolor='#CCCCCC',$minorcolor='#DDDDDD';
    protected $majortype='solid',$minortype='solid';
    protected $show=false, $showMinor=false,$majorweight=1,$minorweight=1;
    protected $fill=false,$fillcolor=array('#EFEFEF','#BBCCFF');
    protected $hideFirstLastY = false; // dies hinzu gefuegt

    function __construct($aAxis) {
        $this->scale = $aAxis->scale;
        $this->img = $aAxis->img;
    }

    // dies hinzu gefuegt
    function SetHideFirstLastY($hideIt) {
        $this->hideFirstLastY = $hideIt;
    }
    // und Aenderungen in einer privaten Methode DoStroke
Der Nachteil: Wird die betr. Datei aktualisiert, gehen die Änderungen verloren. Mein Plan ist, eine zusätzliche Datei anzulegen und dort die protected Variable und die Funktion SetHideFirstLastY hinzuzufügen und die Funktion DoStroke zu überschreiben. Die Frage ist, ob und wie das möglich ist?
Edit: Wenn ich danach versuche, zu googeln, finde ich nur den Tipp, eine Kindklasse anzulegen. Sind dann die neuen Elemente in der Elternklasse verfügbar? Die neuen/geänderten Codeteile sollen ja für das originale Skript unter der Elternklasse sichtbar sein.
 
Zuletzt bearbeitet von einem Moderator:
Mit einer eigenen Klasse erweitern (extends). Anschliessend mit der eigenen Klasse arbeiten
PHP:
//Die Originalklasse einbinden
include_once 'Grid.php';

class MyGrid extends Grid{
    protected $myVar = 123;

    function __construct($aAxis){
         //Konstrukteur der Parentklasse ausführen
         parent::__construct($aAxis);
    }

    //Eigene Protected Function
    protected function anc(){
        //TODO: Mach was. Die Protected und Public Funktionen/Properties des Parent sind verfügbar 
       echo $this->scale;
    }

    //Public Function überchreiben
    public function DoStroke(){
        //TODO: Mach was
    }
}
 
Anschliessend mit der eigenen Klasse arbeiten
Hm, das ist das, was ich bisher gefunden hatte. Das Problem ist, dass die Klasse Grid tief im Inneren der Biblithek verwendet wird und nicht von mir als Anwender. Dann müsste ich Grid durch MyGrid ersetzen und ich will ja gerade vermeiden, die Dateien der Bibliothek zu ändern.
 

Neue Beiträge

Zurück