D.R.: „with“ in PHP?

Hallo,

Ich habe mir jetzt ein paar Klassen und Objekte in PHP erstellt, um eben nicht alles mit echo ausgeben zu müssen, sondern den Code objektorientiert erstellen zu können (wie halt mit den DOM-Methoden). Das ganze funktioniert auch schon ganz gut.

Eine Hilfe, die ich in JavaScript oft verwendete fehlt mit aber: die http://de.selfhtml.org/javascript/sprache/objekte.htm#with@title=with-Anweisung. Ich habe auch schon alles abgesucht, aber weder „with“ noch etwas ähnliches gefunden. Wenn ich das Wort in eine Suchmaschine eingebe, kommt ja logischer Weise auch kein sinnvolles Ergebnis.

Gibt es in PHP eine Entsprechung zu „with“, bzw. (wie) kann man sich sowas selber bauen?

mfg. Daniel

  1. Hello out there!

    Eine Hilfe, die ich in JavaScript oft verwendete fehlt mit aber: die http://de.selfhtml.org/javascript/sprache/objekte.htm#with@title=with-Anweisung.

    Welche in JavaScript AFAIK deprecated ist.

    See ya up the road,
    Gunnar

    --
    „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
    1. Hallo,

      Eine Hilfe, die ich in JavaScript oft verwendete fehlt mit aber: die http://de.selfhtml.org/javascript/sprache/objekte.htm#with@title=with-Anweisung.

      Welche in JavaScript AFAIK deprecated ist.

      Waas?! Wieso denn das? Warum? Was spricht gegen with?

      Warum sollte man nicht mehrere Anweisungen in einem Objekt ausführen können, ohne dieses jedes Mal neu referenzieren zu müssen?

      Wird es als übersichtlicher empfunden, jedes Mal eine Variable zu erstellen?

      Das merk' ich mir als die sinnloseste Entwicklung in JavaScript.

      mfg. Daniel

      1. Hello out there!

        Warum?

        Keine Ahnung; ich weiß nur, dass.

        Was spricht gegen with?

        Mathias hatte eine Ahnung.

        See ya up the road,
        Gunnar

        --
        „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
      2. Hi,

        Waas?! Wieso denn das? Warum? Was spricht gegen with?

        Für JS-Anfänger zu mißverständlich/fehleranfällig.

        Das merk' ich mir als die sinnloseste Entwicklung in JavaScript.

        Na ja, bis das real aus den JS-Engines verschwindet, wird man wohl lange warten können ... >;->

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
        1. Waas?! Wieso denn das? Warum? Was spricht gegen with?

          Für JS-Anfänger zu mißverständlich/fehleranfällig.

          LOL - das ist aber wirklich schwarzer Humor.

          1. Hi,

            Für JS-Anfänger zu mißverständlich/fehleranfällig.
            LOL - das ist aber wirklich schwarzer Humor.

            Nein, eine Bewertung IIRC der Mozilla-Entwickler. Und auch wenn ich die detailierte Begründung für diese Meinung nicht herzitieren kann, sie ernstgemeint und auch nachvollziehbar ... :-)

            Gruß, Cybaer

            --
            Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
        2. Hallo,

          Waas?! Wieso denn das? Warum? Was spricht gegen with?

          Für JS-Anfänger zu mißverständlich/fehleranfällig.

          Es ist aber IMHO übersichtlicher, als wenn man dauernd irgendwelche Variablen erstellt.

          So ist:

          var td = tr.appendChild(document.createElement("td"));  
          td.className = "Klasse";  
          td.id = "ID";
          

          doch viel unübersichtlicher als:

          with (appendChild(document.createElement("td"))){  
           className = "Klasse";  
           id = "ID";  
          }
          

          Mit „with“ kann man also praktisch ganze Baumstrukturen abbilden, während man bei Variablen noch nicht mal auf die Idee kommt, den Quellcode überhaupt einzurücken.

          Na ja, bis das real aus den JS-Engines verschwindet, wird man wohl lange warten können ... >;->

          Aber man möchte ja trotzdem lieber Zeitgemäß programmieren, um nicht vielleicht doch mal auf einen Browser zu stoßen, der das nicht kann…

          Das einzige, was ich an „with“ komisch finde, ist, dass man trotzdem noch ohne Probleme alert() und andere Methoden des window-Objektes ausführen kann. Das hätte man IMHO etwas strikter gestalten können.

          Theoretisch läuft ein Script defaultmäßig immer innerhalb des window-Objektes. Das ist ja eigentlich auch eine Form von „with“.

          mfg. Daniel

          1. Hi,

            Für JS-Anfänger zu mißverständlich/fehleranfällig.
            Es ist aber IMHO übersichtlicher, als wenn man dauernd irgendwelche Variablen erstellt.

            Geschmackssache.

            Aber *mir* mußt Du das nicht sagen. ;)

            Das Problem bei with ist, daß es wohl sehr leicht Konstrukte geben kann, wo die Eindeutigkeit des Bezugs nicht mehr gegeben ist.

            Das einzige, was ich an „with“ komisch finde, ist, dass man trotzdem noch ohne Probleme alert() und andere Methoden des window-Objektes ausführen kann. Das hätte man IMHO etwas strikter gestalten können.
            Theoretisch läuft ein Script defaultmäßig immer innerhalb des window-Objektes. Das ist ja eigentlich auch eine Form von „with“.

            Nein, die JS-Engine versucht sich bei unklarer Zuweisung ggf. einfach "durchzuhangeln". Und dort, wo es sinnvoll ist, wird halt gestoppt - und das ist bei vielen Objekten eben window als letztmögliche Instanz ...

            Gruß, Cybaer

            --
            Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
            1. Hallo,

              Theoretisch läuft ein Script defaultmäßig immer innerhalb des window-Objektes. Das ist ja eigentlich auch eine Form von „with“.

              Nein, die JS-Engine versucht sich bei unklarer Zuweisung ggf. einfach "durchzuhangeln". Und dort, wo es sinnvoll ist, wird halt gestoppt - und das ist bei vielen Objekten eben window als letztmögliche Instanz ...

              Also ist aus besser, window.irgendwas() zu schreiben? Das müsste ja schneller ausgeführt werden, weil das Objekt eindeutig referenziert wurde oder?

              mfg. Daniel

              1. Hi,

                Also ist aus besser, window.irgendwas() zu schreiben?

                Es ist auf jeden Fall eindeutiger (s. z.B. window.location vs. document.location oder auch window.open() vs. document.open())

                Das müsste ja schneller ausgeführt werden, weil das Objekt eindeutig referenziert wurde oder?

                Könnte/müßte sein - aber ob das bißchen irgendwo von Relevanz ist, wage ich dann aber doch zu bezweifeln ... ;-)

                ... erst recht wenn man mit DOM und solchen "Geschossen" wie getElementsByClass() arbeitet. ;->

                Gruß, Cybaer

                --
                Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
                1. Es ist auf jeden Fall eindeutiger (s. z.B. window.location vs. document.location oder auch window.open() vs. document.open())

                  "Das ist eindeutiger" sagte der Taubste dem Blindsten.

                  1. Hi,

                    "Das ist eindeutiger" sagte der Taubste dem Blindsten.

                    "Ich habe vollstes Vertrauen in Dein Urteil", antwortete dieser. Der Rest war Schweigen.

                    Cheatah

                    --
                    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                    X-Will-Answer-Email: No
                    X-Please-Search-Archive-First: Absolutely Yes
  2. Hello,

    Gibt es in PHP eine Entsprechung zu „with“, bzw. (wie) kann man sich sowas selber bauen?

    Es gibt den Adress-Alias. Der bewirkt im Prinzip das Gewünschte

    Da PHP eine Interpreter-Sprache ist, kannst Du keine konsequente Compiler-Sprachen-Umsetzung erwarten, wie in Pascal o.ä.

    Die Präferenz-Dereferenz "with" ist daher nur über die Definition eines Alias nachvollziehbar. _wo_ PHP die Daten im Pseicher genau ablegt, sit sowieso nicht durch den Programmierer steuerbar.

    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 Tom,

      Gibt es in PHP eine Entsprechung zu „with“, bzw. (wie) kann man sich sowas selber bauen?

      Es gibt den Adress-Alias. Der bewirkt im Prinzip das Gewünschte

      Was ist das, bzw. wie wendet man den an? Habe davon noch nie etwas gehört. Habe schon auf PHP.net danach gesucht…

      Da PHP eine Interpreter-Sprache ist, kannst Du keine konsequente Compiler-Sprachen-Umsetzung erwarten, wie in Pascal o.ä.

      Ich habe noch nie eine Compiler-Sprache genutzt. „with“ kannte ich lediglich aus JavaScript.

      _wo_ PHP die Daten im Pseicher genau ablegt, sit sowieso nicht durch den Programmierer steuerbar.

      *g* Das ist mir eigentlich vollkommen egal. Ich wusste gar nicht, dass „with“ überhaupt etwas mit „im Speicher ablegen“ zu tun hat.

      mfg. Daniel

      1. Hello,

        Es gibt den Adress-Alias. Der bewirkt im Prinzip das Gewünschte

        Was ist das, bzw. wie wendet man den an? Habe davon noch nie etwas gehört. Habe schon auf PHP.net danach gesucht…

        $_datensatz = ('Hallo','ich','bin','ein','Datensatz');

        $_anderer_Name &= $_datensatz;

        echo "<pre>\n";
          echo print_r($_anderer_name,1);
          echo "</pre>\n";

        $_anderer_Name &= $_datansatz[5];
          $_anderer_name = 'kein';

        echo "<pre>\n";
          echo print_r($_datensatz,1);
          echo "</pre>\n";

        So ungefähr zur Verdeutlichung.

        Wenn Du also einen Zugriff solcher Art öfter hättest

        echo $_array[$array_2[2]]['links']
          echo $_array[$array_2[2]]['oben']
          echo $_array[$array_2[2]]['unten']

        könntest Du den ersten Teil durch den Alias ersetzen

        $_direkt &= $_array[$array_2[2]];

        echo $_direkt['unten'];

        *g* Das ist mir eigentlich vollkommen egal. Ich wusste gar nicht, dass „with“ überhaupt etwas mit „im Speicher ablegen“ zu tun hat.

        Entstanden sit es sicherlich aus der nehrfachen Dereferenzierung, die bei größeren Datenmodellen notwendig ist, um die Variable zu erreichen.

        Segment-Descriptor
          Verschiebeanteil
          Daten-Offsett im Segemnt

        Das hat dann später auch in die Hochsprechen Einzug genommen, um nicht jedes Mal den ganzen Schwanz hinschreiben zu müssen.

        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,

          $_datensatz = ('Hallo','ich','bin','ein','Datensatz');

          $_anderer_Name &= $_datensatz;

          echo "<pre>\n";
            echo print_r($_anderer_name,1);
            echo "</pre>\n";

          $_anderer_Name &= $_datansatz[5];
            $_anderer_name = 'kein';

          echo "<pre>\n";
            echo print_r($_datensatz,1);
            echo "</pre>\n";

          Das funktioniert leider nicht. PHP gibt mir folgendes aus (Quelltext):

          Parse error: syntax error, unexpected ',' in X:\Meine Webseite\more\Test-Adress-Alias.php on line 4

          Wenn ich vor die Klammern bei „$_datensatz“ „array“ schreibe, funktioniert es auch nicht. Dann kommt:

            
          <br />  
          <b>Notice</b>:  Undefined variable: _anderer_Name in <b>X:\Meine Webseite\more\Test-Adress-Alias.php</b> on line <b>6</b><br />  
          <pre>  
          <br />  
          <b>Notice</b>:  Undefined variable: _anderer_name in <b>X:\Meine Webseite\more\Test-Adress-Alias.php</b> on line <b>9</b><br />  
          </pre>  
          <br />  
          <b>Notice</b>:  Undefined variable: _datansatz in <b>X:\Meine Webseite\more\Test-Adress-Alias.php</b> on line <b>12</b><br />  
          <pre>  
          Array  
          (  
              [0] => Hallo  
              [1] => ich  
              [2] => bin  
              [3] => ein  
              [4] => Datensatz  
          )  
          </pre>  
          
          

          So ungefähr zur Verdeutlichung.

          Wenn Du also einen Zugriff solcher Art öfter hättest

          echo $_array[$array_2[2]]['links']
            echo $_array[$array_2[2]]['oben']
            echo $_array[$array_2[2]]['unten']

          könntest Du den ersten Teil durch den Alias ersetzen

          $_direkt &= $_array[$array_2[2]];

          echo $_direkt['unten'];

          Hm, das kann ich bei meinen Objekten auch ohne diesen Adress-Alias machen. Folgendes funktioniert ebenso:

            
          $x = $document->getElementById("ElementID");  
          $x->setAttribute("style","color:red;");  
          
          

          Dabei würde er das Element mit der ID „ElementID“ z.B. rot färben (per style-Attribut).

          Den Adress-Alias scheint man also nur zu brauchen, wenn man die Referenz von (assoziativen) Arrays in eine Variable speichern will, weil er sonst eine Kopie erstellt.

          Eine Entsprechung zu „with“ wollte ich, weil es IMHO übersichtlicher ist und man auf zusätzliche Variablen verzichten kann.

          Naja, ich habe mir das jetzt sowieso noch etwas vereinfacht, sodass ich die Unterobjekte kaum noch neu referenzieren muss.

          mfg. Daniel

          1. Hello,

            Hallo,

            $_datensatz = array ('Hallo','ich','bin','ein','Datensatz');

            $_anderer_Name &= $_datensatz;

            echo "<pre>\n";
              echo print_r($_anderer_name,1);
              echo "</pre>\n";

            $_anderer_Name &= $_datansatz[5];
              $_anderer_name = 'kein';

            echo "<pre>\n";
              echo print_r($_datensatz,1);
              echo "</pre>\n";

            Das funktioniert leider nicht. PHP gibt mir folgendes aus (Quelltext):

            Da war auch 'was verloren gegangen...

            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,

              $_datensatz = array ('Hallo','ich','bin','ein','Datensatz');

              Genau das hatte ich ja danach ausprobiert. Dann kommen aber die Notices, wodurch das Ganze auch nicht funktioniert :-(

              mfg. Daniel