Ankündigung

Einklappen
Keine Ankündigung bisher.

Kindklasse und dessen Name

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Knechtle
    hat ein Thema erstellt Kindklasse und dessen Name.

    Kindklasse und dessen Name

    Morgen,

    einen passenderen Titel habe ich nicht gefunden.
    Ich suche eine möglichkeit bei einer Vererbung den Klassennamen der originalen Klasse zu übernehmen aber in einer geerbten Methode von der Elternklasse.

    Da das relativ unverständlich ist einfach ein Beispiel:

    PHP-Code:
    class BaseObject
    {
         private static 
    $instance NULL;
         public static function 
    getinstance()
         {
              
    self::$instance = new $this;
              return 
    self::$instance;
         }

    PHP-Code:
    class BaseApplication extends BaseObject
    {
          ...
    some code

    index.php
    PHP-Code:
    include ...
    $foo BaseApplication::getinstance(); 
    Lieg ich in der Annahme richtig das dies nicht möglich ist oder suche ich einfach nur falsch

    Vielen Dank schon mal

  • nikosch
    antwortet
    Initialisierungen von singleton instanziierten Klassen sollte man tunlichst von der Erzeugung trennen, da es sonst kein echtes abstract Singleton ist. Zudem musst du bei deiner Klasse unterscheiden zwischen "create class" und "get reference", was die Implementierung umständlicher macht.
    Instanziierung ist die Erzeugung, eben new oder createInstance beim ST.
    Initialisierung ist die Vorbelegung mit Werten (bspw. im Konstruktor oder über eine Init-Funktion).

    Mittlerweile sehe ich das ähnlich wie der Doc und benutze auch eigentlich kein Singleton mehr. Jedenfalls: Wenn Du an zwei Stellen oder mehr eine Instanz holst/erzeugst, läufst Du in das Problem, wenn Du das mit Parametern machst, dass Du nicht genau weißt, welchen Zustand das Objekt gerade hat. Bzw. brauchst Du überall diese Parameter, obwohl sich der ST-Aufruf da in verschiedensten Programmkomponenten (und damit Variablenräumen) befinden kann.

    Eine Alternative kann ein DI-Container sein. Oder das Objekt ist so flexibel, dass man es immer wieder neu konfigurieren kann. Oder Du hinterlegst die Konfiguration in einer Registry o.ä.

    Einen Kommentar schreiben:


  • fab
    antwortet
    Das ist die PHP 5.3 Variante. Für frühere Versionen bedeuten alle Workarounds IMHO mehr Aufwand als es die paar eingesparten Zeilen rechtfertigen würde

    Einen Kommentar schreiben:


  • Frank
    antwortet
    Abstract Singleton - php bar

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Dein Beispiel am Ende von diesem Thread ist häftig ^^

    Auch die Disskussion dort finde ich sehr interessant. Kannst du mir das erklären was dr.e. genau damit meinte als du dein Singelton vorgestellt hattest?

    Hallo nikosch77,

    Initialisierungen von singleton instanziierten Klassen sollte man tunlichst von der Erzeugung trennen, da es sonst kein echtes abstract Singleton ist. Zudem musst du bei deiner Klasse unterscheiden zwischen "create class" und "get reference", was die Implementierung umständlicher macht.

    Das Thema Initialisierung habe ich in meinem Framework in das "coreObject" eingebaut. Mit der Methode "createAndInitServiceObject()" kann man sich eine Applikations-Schicht oder eine Klasse singleton instanziieren und gleichzeitig initialisieren lassen, sofern die Klasse eine init()-Methode hat. So ist transparent, dass dort eine Singlton-Instanz zurückkommt egal ob ich eine erzeugt habe oder nur eine Referenz zurückgebe inkl. Initialisierung.
    Aso und vielen Dank für den Link zum Thread

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Is aber schon 'was älter: http://www.php.de/php-fortgeschritte...tml#post343082

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Nur mit eval. Kannst mal die Boardsuche anschmeißen, da gibts irgendwo nen Thread von mir über SIngleton und Paraaadktylon..

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    @nikosch: Super das habe ich gesucht vielen Dank hast mir sehr weitergeholfen.

    Aber wenn die Frage erlaubt ist, kennt ihr einen anderen Weg es auch für ältere PHP Versionen zu realisieren?

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Das nennt sich abstraktes SIngleton und ist erst ab PHP 5.3 möglich.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Genau das isset ich möchte ein Grundgerüst für miene Klassen haben.

    Das Problem ist der Singelton. Ich möchte sozusagen die Instanz von BaseApplication. Aber dafür müsste in BaseObject der Name der erbenden Klasse auftauchen.

    Hoffe ist nicht mehr so Sinnfrei

    Einen Kommentar schreiben:


  • lstegelitz
    antwortet
    Was meinst du mit Klassenname der Basisklasse übernehmen?

    Das Beispiel ist übrigens relativ sinnfrei, was soll es darstellen?
    Du bekommst immer ein neues Objekt vom Typ BaseObject...

    Einen Kommentar schreiben:

Lädt...
X