Klassen dynamisch mit Parametern aufrufen

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

  • Klassen dynamisch mit Parametern aufrufen

    Hi,

    ich teste gerade wieder an etwas rum.

    Ich will aus einem String eine Bestimmt Zeichenkette parsen und dementsprechend eine Klasse und Funktionen aufrufen.

    PHP-Code:
    <?php
    $tpl
    ="header - {Module_News;'output'=>'full'} - footer";

    preg_match('/{.*}/U'$tpl$results);
    foreach(
    $results as $result){
        
    $module=explode(';',str_replace(array('{','}'),'',$result));
        echo 
    var_dump($module);
        
    $class=new $module[0].'('.$module[1].')';
    }
    ?>
    Normal wird die Klasse so aufgerufen:
    PHP-Code:
    <?php $class=new Module_News(array('output'=>'full')); ?>
    Und genau das will ich 'dynamisch' bzw. variabel machen, je nachdem, was in dem Template steht. So wie ich das nun versucht habe ist es auch noch der falsche Ansatz denk ich mal, aber genau hier hänge ich gerade.

    Die Klasse kann ich so schon variabel aufrufen, das Problem liegt rein an den Parametern.
    Die bekomme ich 1. nicht in einen Array in der Form "array('output'=>'full')" und ich bekomm den Array auch nicht mitübermittelt.
    Rufe ich nur $class=new $module[0] auf, dann geht das. Aber ich brauch ja die Parameter.

    Ich hoffe die Beschreibung reicht aus, sonst besser ich gerne nochmal nach.

    Danke schonmal,

    Peter

  • #2
    Wenn in $module[1] das richtige drinsteht, sollte
    PHP-Code:
    $class=new $module[0]($module[1]); 
    helfen.

    Wenn nicht: Was steht in $module[1] (Ausgabe deines var_dumps)?
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Das funktioniert schonmal. Nun ist nur noch das Problem mit dem dynamischen Übergeben eines Arrays, wobei ich auch nicht weiss, wie ich das so genau beschreiben soll.

      Das ist der Array:
      PHP-Code:
      array(2) {
        [
      0]=>
        
      string(11"Module_News"
        
      [1]=>
        
      string(16"output=>full"

      ich kann ihn aber auch so erzeugen:

      PHP-Code:
      array(2) {
        [
      0]=>
        
      string(11"Module_News"
        
      [1]=>
        
      string(16"'output'=>'full'"

      Denn nun ist das Problem, dass ich aus dem array Element 1 dem output=>full einen array erzeugen muss, in dem String stehen die Parameter immer in der form parameter=>wert und die einzelnen sind Komma getrennt.

      Wenn ich das mit array aufrufe

      PHP-Code:
      $class=new $module[0] (array($module[1])); 
      kommt das dabei raus

      PHP-Code:
      array(1) {
        [
      0]=>
        
      string(16"'output'=>'full'"

      was ja nicht anders zu erwarten ist. Aber wie bekomm ich das anders hin?

      Danke

      Kommentar


      • #4
        Und waarum machst du nicht ein explode an der Zeichenkette =>?

        PHP-Code:
        $paramater explode('=>'$module[1]);
        $params = array();
        $count count($parameter);
        for (
        $i 0$i $count$i += 2)
          
        $params[$parameter[$i]] = $parameter[$i 1]; 
        Irgendwie so
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          so hab ich mir das auch gedacht, erst nach ',' exploden und dann nach '=>'

          ich wollte nur nachfragen ob es da auch eine bessere lösung gibt.

          danke,

          peter

          Kommentar


          • #6
            Noch eine kleine Sache

            wieso kann ich eine Klasse so aufrufen

            PHP-Code:
            $class_name='Module_'.$res['name'];
            $tmp=new $class_name
            aber nicht so:

            PHP-Code:
            $tmp=new 'Module_'.$res['name']; 
            Ich bin verwirrt

            Danke

            Kommentar

            Lädt...
            X