aceneS: foreach-Variable als Klasseneigenschaft

Guten Abend.

Wie lässt sich die "Laufvariable" in einer foreach-Schleife als Klasseneigenschaft einbinden? Im Beispiel soll das (gedacht) so aussehen:

foreach( $array as $value )
{
     $klasse->$value = 'geloescht';
}

Ich habe versucht, $value durch doppelte Dollarzeichen einzubinden. Dies liefert jedoch einen Parse-Error.

Nach Recherche auch hier im Forum kenne ich die korrekte Deklaration nicht und hoffe auf eine Lösung.

Viele Grüße,

aceneS

  1. Hello,

    Wie lässt sich die "Laufvariable" in einer foreach-Schleife als Klasseneigenschaft einbinden? Im Beispiel soll das (gedacht) so aussehen:

    Foreach() hat keine (zugängliche) Laufvariable.
    Foreach hat nur (variable) Schleifenparameter.

    foreach( $array as $value )
    {
         $klasse->$value = 'geloescht';
    }

    Einen Exkurs dazu gibt es heute schon unter
    https://forum.selfhtml.org/?t=150080&m=975331

    Um etwas nachhaltig zu verändern, musst Du Dir von foreach() auch den Schlüsselwert mitteilen lassen

    $klasse->$array ist bekannt.

    foreach( $klasse->$array as $key => $value )
     {
          $klasse->$array[$key] = 'geloescht';
     }

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. Hallo,

      $klasse->$array ist bekannt.

      Hier liegt das Problem: Es ist mir nicht möglich, eine Variable oder auch ein Array als Klassen - bzw. Objekteigenschaft einzubinden. Der Versuch liefert eine Parse-Error.

      Wie kann ich eben jene oben genannten Absichten ausdrücken?

      Gruß,

      aceneS

  2. Hallo,

    mir ist unklar, warum Du mit Deinem Code Probleme hast. Folgendes läuft bei mir auf einem 5.2.1 CLI reibungslos:

      
    class c{  
     var $a='eddi';  
    }  
    $a=new c;  
    print_r($a);  
    $m=array('a','b');  
    foreach($m as $v){  
     $a->$v='susi';  
    }  
    print_r($a);  
    
    

    Ausgabe:

    c Object
    (
        [a] => eddi
    )
    c Object
    (
        [a] => susi
        [b] => susi
    )

    Gruß aus Berlin!
    eddi

    1. Hallo,

      mir ist unklar, warum Du mit Deinem Code Probleme hast. Folgendes läuft bei mir auf einem 5.2.1 CLI reibungslos:

      hm, ich verwende PHP 5.1.2. Da ist jene Notation nicht möglich.

      Gibt es eventuell Einstellungen, die in PHP vorgenommen werden können, die das Handling derartiger Ausdrücke regulieren?

      Gruß,

      aceneS

      1. hi,

        hm, ich verwende PHP 5.1.2. Da ist jene Notation nicht möglich.

        Und das heisst konkret?

        Bitte reduzierten, aber vollständigen Testcode, und zugehörige Fehlermeldung(en).

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Hello,

          hm, ich verwende PHP 5.1.2. Da ist jene Notation nicht möglich.

          Und das heisst konkret?

          Bitte reduzierten, aber vollständigen Testcode, und zugehörige Fehlermeldung(en).

          Naja, wenn er die Eigenschaften bei der Klassendefinition bereits als Private deklariert hat, dann sollte er in der beschriebenen Art und Weise außerhalb nicht an die Eigenschaften herankommen, sondern muss eine Methode dafür nutzen.
          Seit PHP 5.x wird das ja auch sauber berücksichtigt.

          Harzliche Grüße vom Berg
          http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau

          1. Hallo,

            ich weiß, es klingt blöd, aber das Problem hat aich auf wundersame Weise von selbst gelöst: Nach einem Server-Neustart kommt der Parse-Error an dieser Stelle nicht mehr und der Code funktioniert, so wie ihn auch eddi bereits in seinem ersten bzw. zweiten Posting getestet hatte.

            Vielleicht haben die Zeilenangaben von Fehlermeldung und Texteditor nicht übereingestimmt, sodass ich an einer falschen Stelle angesetzt habe und in anderen Schritten dann zufällig, vor dem Server-Neustart, den eigentlichen Fehler behoben habe?

            Wie dem auch sei, die Klasseneigenschaften sind public gesetzt und die Sache scheint im Moment erstmal zu funktionieren.

            Ich danke sehr,

            aceneS

      2. Hallo,

        mir ist unklar, warum Du mit Deinem Code Probleme hast. Folgendes läuft bei mir auf einem 5.2.1 CLI reibungslos:

        hm, ich verwende PHP 5.1.2. Da ist jene Notation nicht möglich.

        Gibt es eventuell Einstellungen, die in PHP vorgenommen werden können, die das Handling derartiger Ausdrücke regulieren?

        also bin ich für Dich mal ins Museum gegangen und habe mir ein 5.1.2 aus der Vitrine geholt. Die Ausgabe meines kleinen Probescripts ist mit der Version PHPs die gleich(, was ich auch nicht anders erwartet hatte).

        Wenn Dir Toms Hinweis nicht helfen sollte, dann geh bitte so vor!

        Gruß aus Berlin!
        eddi