Zum Inhalt springen

Empfohlene Beiträge

Geschrieben (bearbeitet)

hi,

folgendes Problem:


Class A
{
public static $_mystructure = array();

public function doIt()
{
$struct = ... ????
print_r($struct);
}

public function doother()
{
$struct = ... ????
print_r($struct);
}
}

class B extends A
{
public static $_mystructure = array("A","B","C");
}

aufruf:
$obj = new B();
$obj->doIt();
[/PHP]

nun muss doIt() aber auf die static-information der Kind-klasse zugreifen....WIE ?

ein self::$_mystructure gibt ja das Array der Parent-Klasse, mit dem ich nichts anfangen kann.

Bisher löse ich es so, das die Kindklasse die Methoden überschreibt, dann die Parent-Methoden aufruft mit dem array als Parameter, das ist aber mist, denn alle Methoden müssen in alle Kindklassen mit rein, obwohl der Code überall 1:1 gleich ist.

(es gibt derzeit so ca. 20 Kindklassen in diesem Fall und es werden mehr)

hat jemand eine Idee ?

danke

Bearbeitet von Aiun
Geschrieben

ich habe da einen funktionierenden Ansatz gefunden, aber irgendwie sieht das nicht sauber aus ... Meinungen ?


<?php
class A
{
public static $myvar = array();

public function doIt()
{
print_r(get_class_vars(get_class($this)));
}
}

class B extends A
{
public static $myvar = array('Test');
}

$obj = new B();
$obj->doIt();
?>
[/PHP]

ergibt: Array ( [myvar] => Array ( [0] => Test ) )

Geschrieben

Hm...also ich hab jetzt von PHP nicht so viel ahnung, aber eigentlich geht es dabei ja im Prinzip um OOP.

Wenn du in deiner Basisklasse das Attribut $_mystructure brauchst du das selbe Attribut ja in der Kindklasse nicht nochmal anlegen, sondern musst in der Kindklasse das Objekt aus der Elternklasse nur noch mit deinen Daten befüllen, dann dürfte doch auch die Methode in der Elternklasse auf diese Datenzugreifen können.

Im folgenden mal in Java dargestellt ( wie gesagt, PHP behersche ich nicht so):

A


import java.util.*;


public class A {

	public static ArrayList $_mystructure;


	public void doIt()

    {

         ArrayList $struct = $_mystructure;

         System.out.println($struct);

    }


}

B

import java.util.*;



public class B extends A {


	//Konstruktor

	public B() {

		$_mystructure = new ArrayList(Arrays.asList(new String[]{"Test1", "Test2"}));

	}

}
Aufruf
public class Aufruf {


	public static void main(String[] args) {

		B $obj = new B();

		$obj.doIt();

	}


}
Ausgabe
[Test1, Test2]

Geschrieben

das würde jedoch bedeuten, strukturinformationen die bei allen Objekten gleich sind, letztlich doch in jedem Objekt von neuem zu laden / im Speicher zu halten.

und genau das will ich verhindern. (Performance :) )

Geschrieben

Eigentlich nicht, dadurch dass das Objekt in der Elternklasse noch immer static ist, wird es ja trotzdem nur einmal erzeugt und damit auch im Speicher gehalten. Und jedesmal wenn eine Kindklasse erzeugt wird, wird der alte Inhalt dann eben überschrieben. Aber es bleibt nur 1 Objekt im Speicher.

Jedenfalls denke ich, dass es so ist, berichtigt mich, wenn ich da falsch liege.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...