zusammenführen zwei Variablennamen – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self?srt=yes zusammenführen zwei Variablennamen Thu, 19 Mar 20 09:11:46 Z https://forum.selfhtml.org/self/2020/mar/19/zusammenfuhren-zwei-variablennamen/1767354?srt=yes#m1767354 https://forum.selfhtml.org/self/2020/mar/19/zusammenfuhren-zwei-variablennamen/1767354?srt=yes#m1767354 <p>Ich habe zwei Variablen die ich zusammenführen möchte so das es ein VariablenName ist:</p> <p>$var=1;</p> <p>$zahl_.$var=12;</p> <p>echo $zahl_1;</p> <p>Aber leider klappt es nicht.</p> <p>Lara</p> zusammenführen zwei Variablennamen Thu, 19 Mar 20 09:20:29 Z https://forum.selfhtml.org/self/2020/mar/19/zusammenfuhren-zwei-variablennamen/1767358?srt=yes#m1767358 https://forum.selfhtml.org/self/2020/mar/19/zusammenfuhren-zwei-variablennamen/1767358?srt=yes#m1767358 <p>Hallo,</p> <blockquote> <p>Ich habe zwei Variablen die ich zusammenführen möchte so das es ein VariablenName ist:</p> </blockquote> <p>variable Variablen konnte PHP mal, afaik ist das aber vorbei.</p> <p>Beschäftige dich mit Arrays, da kannst du solche Sachen basteln.</p> <p>Gruß<br> Kalk</p> zusammenführen zwei Variablennamen Thu, 19 Mar 20 09:56:04 Z https://forum.selfhtml.org/self/2020/mar/19/zusammenfuhren-zwei-variablennamen/1767373?srt=yes#m1767373 https://forum.selfhtml.org/self/2020/mar/19/zusammenfuhren-zwei-variablennamen/1767373?srt=yes#m1767373 <p><strong>WARNUNG!</strong></p> <p>wenn Du nicht mindestens sieben (7=) sehr gute Gründe dafür hast, das zu tun, dann lass die Finger von der „Lösung“, Dein Problem liegt woanders.</p> <p>So geht es, ich hab den Code aber aus obigen Grund als "bad" markiert</p> <pre><code class="block bad language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token comment">/* ** BAD! BAD! BAD! ** */</span> <span class="token variable">$var</span> <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token variable">$</span><span class="token punctuation">{</span><span class="token string single-quoted-string">'zahl_'</span><span class="token operator">.</span><span class="token variable">$var</span><span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token number">12</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token variable">$zahl_1</span><span class="token punctuation">;</span> </span></code></pre> <p>Besser:</p> <pre><code class="block good language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token variable">$i</span> <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token variable">$zahl</span><span class="token punctuation">[</span><span class="token variable">$i</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">12</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token variable">$zahl</span><span class="token punctuation">[</span><span class="token variable">$i</span><span class="token punctuation">]</span><span class="token punctuation">;</span> </span></code></pre> zusammenführen zwei Variablennamen Thu, 19 Mar 20 09:41:28 Z https://forum.selfhtml.org/self/2020/mar/19/zusammenfuhren-zwei-variablennamen/1767366?srt=yes#m1767366 https://forum.selfhtml.org/self/2020/mar/19/zusammenfuhren-zwei-variablennamen/1767366?srt=yes#m1767366 <p>Hello,</p> <blockquote> <p>Hallo,</p> <blockquote> <p>Ich habe zwei Variablen die ich zusammenführen möchte so das es ein VariablenName ist:</p> </blockquote> <p>variable Variablen konnte PHP mal,</p> </blockquote> <p>Ja. PHP kan <a href="https://www.php.net/manual/de/language.variables.variable.php" rel="nofollow noopener noreferrer">indirekten Variablenzugriff</a></p> <blockquote> <p>afaik ist das aber vorbei.</p> </blockquote> <p>Wo steht das?</p> <blockquote> <p>Beschäftige dich mit Arrays.</p> </blockquote> <p>Ack</p> <p>Glück Auf<br> Tom vom Berg</p> <div class="signature">-- <br> Es gibt nichts Gutes, außer man tut es!<br> Das Leben selbst ist der Sinn. </div> zusammenführen zwei Variablennamen Thu, 19 Mar 20 09:54:10 Z https://forum.selfhtml.org/self/2020/mar/19/zusammenfuhren-zwei-variablennamen/1767371?srt=yes#m1767371 https://forum.selfhtml.org/self/2020/mar/19/zusammenfuhren-zwei-variablennamen/1767371?srt=yes#m1767371 <p>Hallo Tabellenkalk,</p> <blockquote> <p>variable Variablen konnte PHP mal</p> </blockquote> <p>Kann es immer noch, aber man sollte es nicht tun.</p> <p>So geht's nicht</p> <pre><code class="block bad language-php"><span class="token variable">$var</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span> <span class="token variable">$zahl_</span><span class="token operator">.</span><span class="token variable">$var</span><span class="token operator">=</span><span class="token number">12</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token variable">$zahl_1</span><span class="token punctuation">;</span> </code></pre> <p>Aber so - auch wenn man das nicht tun sollte.</p> <pre><code class="block language-php"><span class="token variable">$var</span> <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token variable">$</span><span class="token punctuation">{</span><span class="token string double-quoted-string">"zahl_"</span><span class="token operator">.</span><span class="token variable">$var</span><span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token number">12</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token variable">$zahl_1</span><span class="token punctuation">;</span> </code></pre> <p>So geht's mit Arrays:</p> <pre><code class="block good language-php"><span class="token variable">$var</span> <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token variable">$zahl</span> <span class="token operator">=</span> <span class="token keyword">ARRAY</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Diese Zeile ist nicht unbedingt nötig</span> <span class="token variable">$zahl</span><span class="token punctuation">[</span><span class="token variable">$var</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">12</span><span class="token punctuation">;</span> <span class="token function">var_dump</span><span class="token punctuation">(</span><span class="token variable">$zahl</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Die Initialisierung von $zahl mit <code>ARRAY()</code> (oder <code>[]</code> in neuer Notation) ist nicht zwingend nötig wenn $zahl noch undefiniert war, aber es birgt eine Tretmine, wenn man es nicht tut: Falls $zahl nämlich nicht undefiniert war, würde es einen Fehler geben.</p> <pre><code class="block bad language-php"><span class="token variable">$zahl</span> <span class="token operator">=</span> <span class="token number">7</span><span class="token punctuation">;</span> <span class="token variable">$zahl</span><span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">11</span><span class="token punctuation">;</span> <span class="token comment">// Laufzeitfehler: Kann Skalar nicht als Array verwenden</span> </code></pre> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> zusammenführen zwei Variablennamen Thu, 19 Mar 20 09:45:19 Z https://forum.selfhtml.org/self/2020/mar/19/zusammenfuhren-zwei-variablennamen/1767367?srt=yes#m1767367 https://forum.selfhtml.org/self/2020/mar/19/zusammenfuhren-zwei-variablennamen/1767367?srt=yes#m1767367 <p>Hallo,</p> <blockquote> <blockquote> <p>afaik ist das aber vorbei.</p> </blockquote> <p>Wo steht das?</p> </blockquote> <p>offensichtlich hab ich mich geirrt. Es ist aber nicht empfehlenswert, da es zu nicht nachvollziehbarem Code führt.</p> <p>Gruß<br> Kalk</p> zusammenführen zwei Variablennamen Thu, 19 Mar 20 09:49:46 Z https://forum.selfhtml.org/self/2020/mar/19/zusammenfuhren-zwei-variablennamen/1767370?srt=yes#m1767370 https://forum.selfhtml.org/self/2020/mar/19/zusammenfuhren-zwei-variablennamen/1767370?srt=yes#m1767370 <p>Hello,</p> <blockquote> <p>Hallo,</p> <blockquote> <blockquote> <p>afaik ist das aber vorbei.</p> </blockquote> <p>Wo steht das?</p> </blockquote> <p>offensichtlich hab ich mich geirrt. Es ist aber nicht empfehlenswert, da es zu nicht nachvollziehbarem Code führt.</p> </blockquote> <p>Stimmt für Skalare auf jeden Fall.</p> <p>Bei Arrays kann man diese Möglichkeit für Aliase auf Teilarrays nutzen, was für einige Operationen sehr praktisch ist.</p> <p>Glück Auf<br> Tom vom Berg</p> <div class="signature">-- <br> Es gibt nichts Gutes, außer man tut es!<br> Das Leben selbst ist der Sinn. </div> zusammenführen zwei Variablennamen Tue, 24 Mar 20 17:48:54 Z https://forum.selfhtml.org/self/2020/mar/19/zusammenfuhren-zwei-variablennamen/1767706?srt=yes#m1767706 https://forum.selfhtml.org/self/2020/mar/19/zusammenfuhren-zwei-variablennamen/1767706?srt=yes#m1767706 <p>Liebe Mitdenker, liebe Wissende, liebe Neugierige,</p> <blockquote> <blockquote> <blockquote> <blockquote> <p>afaik ist das aber vorbei.</p> </blockquote> <p>Wo steht das?</p> </blockquote> <p>offensichtlich hab ich mich geirrt. Es ist aber nicht empfehlenswert, da es zu nicht nachvollziehbarem Code führt.</p> </blockquote> <p>Stimmt für Skalare auf jeden Fall.</p> <p>Bei Arrays kann man diese Möglichkeit für Aliase auf Teilarrays nutzen, was für einige Operationen sehr praktisch ist.</p> </blockquote> <p>Für den Direktzugriff auf Subarrays meintest Du aber bestimmt den <a href="https://www.php.net/manual/en/language.references.whatare.php" rel="nofollow noopener noreferrer">Adressoperator</a> und nicht den indirekten Namenszugriff?</p> <p>Spirituelle Grüße<br> Euer Robert</p> <div class="signature">-- <br> Möge der Forumsgeist ewig leben! </div> zusammenführen zwei Variablennamen Thu, 19 Mar 20 13:49:17 Z https://forum.selfhtml.org/self/2020/mar/19/zusammenfuhren-zwei-variablennamen/1767393?srt=yes#m1767393 https://forum.selfhtml.org/self/2020/mar/19/zusammenfuhren-zwei-variablennamen/1767393?srt=yes#m1767393 <p>Tach!</p> <blockquote> <pre><code class="block bad language-php"><span class="token variable">$zahl</span> <span class="token operator">=</span> <span class="token keyword">ARRAY</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Diese Zeile ist nicht unbedingt nötig</span> <span class="token variable">$zahl</span><span class="token punctuation">[</span><span class="token variable">$var</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">12</span><span class="token punctuation">;</span> </code></pre> <p>Die Initialisierung von $zahl mit <code>ARRAY()</code> (oder <code>[]</code> in neuer Notation) ist nicht zwingend nötig wenn $zahl noch undefiniert war, aber es birgt eine Tretmine, wenn man es nicht tut: Falls $zahl nämlich nicht undefiniert war, würde es einen Fehler geben.</p> </blockquote> <p>Wenn das erste Einfügen eines Wertes in ein Array eine eigenständige Anweisung ist, kann man das Array auch als Literal geschreiben zuweisen, um die Probleme zu umgehen.</p> <pre><code class="block good language-php"><span class="token variable">$zahl</span> <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token variable">$var</span> <span class="token operator">=></span> <span class="token number">12</span><span class="token punctuation">]</span><span class="token punctuation">;</span> </code></pre> <p>Eine Auftrennung in Erstellen und Einfügen braucht man nur in Schleifen, wenn die Einfüge-Anweisung mehrfach ausgeführt werden soll.</p> <p>dedlfix.</p> zusammenführen zwei Variablennamen Tue, 24 Mar 20 18:36:15 Z https://forum.selfhtml.org/self/2020/mar/19/zusammenfuhren-zwei-variablennamen/1767709?srt=yes#m1767709 https://forum.selfhtml.org/self/2020/mar/19/zusammenfuhren-zwei-variablennamen/1767709?srt=yes#m1767709 <p>Hallo robertroth,</p> <p>danke für die Mahnung. Diese Spezialität der Speicherverwaltung in PHP kann man nicht oft genug wiederholen.</p> <p>Solange man nichts anderes verlangt, übergibt PHP alles per Wert. Sowas ist klassischerweise ein bäh für die Performance, weil wie wild kopiert wird.</p> <p>Die Magie der schnellen Ausführung in PHP besteht darin, dass PHP die Kopie solange hinauszögert, bis ein Schreibzugriff erfolgt.</p> <pre><code class="block language-php"><span class="token variable">$foo</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">[</span> <span class="token number">11</span><span class="token punctuation">,</span> <span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">13</span><span class="token punctuation">,</span> <span class="token number">14</span> <span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token number">21</span><span class="token punctuation">,</span> <span class="token number">22</span><span class="token punctuation">,</span> <span class="token number">23</span><span class="token punctuation">,</span> <span class="token number">24</span> <span class="token punctuation">]</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token variable">$x</span> <span class="token operator">=</span> <span class="token variable">$foo</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// <-- $foo[0] und $foo[1] werd NOCH nicht kopiert.</span> <span class="token variable">$y</span> <span class="token operator">=</span> <span class="token variable">$foo</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// $x und $foo[0] zeigen auf den gleichen Speicher.</span> <span class="token comment">// $y und $foo[1] ebenso.</span> </code></pre> <p>D.h. beiden Teilarrays werden jetzt doppelt genutzt. Es sind "Geheime Referenzen" entstanden. PHP zählt das mit (reference counting). Schreibzugriffe lösen die Geheimreferenzen auf und erstellen Kopien:</p> <pre><code class="block language-php"><span class="token variable">$x</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">4711</span><span class="token punctuation">;</span> <span class="token comment">// <-- kopiert $foo[0] und $x zeigt auf die Kopie.</span> <span class="token variable">$foo</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">815</span><span class="token punctuation">;</span> <span class="token comment">// <-- kopiert $foo[1]. $y behält den alten Wert, und</span> <span class="token comment">// $foo[1] bekommt die Kopie</span> </code></pre> <p>Jetzt haben wir vier Teilarrays und keine Geheim-Referenzen mehr. Alle werden nur noch einmal genutzt. Und das bedeutet, dass weitere Schreibzugriffe keine Kopie mehr herstellen.</p> <pre><code class="block language-php"><span class="token variable">$x</span><span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">1234</span><span class="token punctuation">;</span> <span class="token comment">// Keine Kopie!</span> </code></pre> <p>Ich glaube, diesen Aufwand mit copy-on-demand treibt keine andere Programmiersprache. Anderswo bleibt das dem Programmierer überlassen.</p> <p>Der Adressoperator ändert das Verhalten! An Stelle einer geheimen Referenz entsteht eine öffentliche, und die darf auch öffentlich weiterexistieren:</p> <pre><code class="block language-php"><span class="token variable">$foo</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token number">1</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">,</span><span class="token number">4</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token variable">$x</span> <span class="token operator">=</span> <span class="token operator">&</span><span class="token variable">$foo</span><span class="token punctuation">;</span> <span class="token comment">// Hier entsteht eine offizielle Referenz</span> <span class="token variable">$x</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">123</span><span class="token punctuation">;</span> <span class="token comment">// Jetzt wird NICHT kopiert!</span> <span class="token function">print_r</span><span class="token punctuation">(</span><span class="token variable">$foo</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Änderung ist in $foo sichtbar</span> </code></pre> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> zusammenführen zwei Variablennamen Tue, 24 Mar 20 20:21:07 Z https://forum.selfhtml.org/self/2020/mar/19/zusammenfuhren-zwei-variablennamen/1767712?srt=yes#m1767712 https://forum.selfhtml.org/self/2020/mar/19/zusammenfuhren-zwei-variablennamen/1767712?srt=yes#m1767712 <p>Hello,</p> <blockquote> <blockquote> <blockquote> <blockquote> <blockquote> <p>afaik ist das aber vorbei.</p> </blockquote> <p>Wo steht das?</p> </blockquote> <p>offensichtlich hab ich mich geirrt. Es ist aber nicht empfehlenswert, da es zu nicht nachvollziehbarem Code führt.</p> </blockquote> <p>Stimmt für Skalare auf jeden Fall.</p> <p>Bei Arrays kann man diese Möglichkeit für Aliase auf Teilarrays nutzen, was für einige Operationen sehr praktisch ist.</p> </blockquote> <p>Für den Direktzugriff auf Subarrays meintest Du aber bestimmt den <a href="https://www.php.net/manual/en/language.references.whatare.php" rel="nofollow noopener noreferrer">Adressoperator</a> und nicht den indirekten Namenszugriff?</p> </blockquote> <p>Ertappt :-O<br> Stimmt selbstverständlich.</p> <p>Und die weiteren Folgen hat Rolf_B ja sehr schön beschrieben.</p> <p>Gebrauchen kann man das sehr schön beim derefrerenzierten Zugriff auf Subarrays.</p> <p>Glück Auf<br> Tom vom Berg</p> <div class="signature">-- <br> Es gibt nichts Gutes, außer man tut es!<br> Das Leben selbst ist der Sinn. </div>