Ankündigung

Einklappen
Keine Ankündigung bisher.

dynamische Variablen- und Klassennamen

Einklappen

Neue Werbung 2019

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

  • dynamische Variablen- und Klassennamen

    Hi,

    gut, dynamische Variablen sind mir bekannt und fänd man auch in der Suche
    PHP-Code:
    <?PHP $a = ${$varName}; ?>
    Interessant wird die Frage erst hier
    Simple Funktionalität:
    PHP-Code:
    <?PHP
    class {
      function 
    getById($id) {
        
    $query "bla";
        
    $row bla..
        return new 
    A($daten);
      }
    }
    ?>
    soll in etwa so funktionieren
    PHP-Code:
    <?PHP
    abstract class {
      function 
    getById($id) {
        
    $query "bla";
        
    $row bla..
        return new 
    __CLASS__($row);
        
    //oder
        // return new {__CLASS__}($daten);
        // genau die beiden tun aber leider so nicht
      
    }
    }
    class 
    extends {
      
    blabla
    }
    $a A::getById($id); // soll dann die Instanz der aktuellen Klasse durch die geerbte Funktion bekommen
    ?>
    Ich möchte eine Funktion in eine Abstrakte Klasse auslagern. Die Funktion muß die Klasse kennen, die sie zu instanziieren hat, nämlich sich selbst.
    Da diese Funktion aber von verschiedenen Klassen geerbt werden kann, ist der Klassenname dynamisch.
    Ich würd gern ne Lösung haben, die ohne einen switch oder eine Factory auskommt, eben eine an die ich beim erben nicht mehr ran muß und eine neue Klasse hizutragen muß.

    Gruß
    Der Desian
    Wenn dich was ankotzt, machs besser.

  • #2
    Switch nein, Factory ja

    PHP-Code:
    <?php
    abstract class foo {
        abstract public function 
    bar();
    }

    class 
    extends foo {
        public function 
    bar() {
            echo 
    'Die Bar ist offen. ';
        }
    }

    class 
    extends foo {
        public function 
    bar() {
            echo 
    'Bar jeder Vernunft. ';
        }
    }

    class 
    fooFactory
    {
        public function 
    createFoo($fooClass) {
            
    $rc = new ReflectionClass($fooClass);
            if (!
    $rc->isSubclassOf('foo')) {
                throw new 
    InvalidArgumentException("'".$fooClass.'\' is not a subclass of foo');
            }
            
    $fooObjekt $rc->newInstance();
            return 
    $fooObjekt;
        }
    }

    $fac = new fooFactory();

    $obj $fac->createFoo('A');
    $obj->bar();

    $obj $fac->createFoo('B');
    $obj->bar();
    ?>

    Kommentar

    Lädt...
    X