{"id":3109,"date":"2021-10-15T07:51:25","date_gmt":"2021-10-15T06:51:25","guid":{"rendered":"https:\/\/www.puls200.de\/?p=3109"},"modified":"2021-10-15T07:51:26","modified_gmt":"2021-10-15T06:51:26","slug":"the-horrors-of-php","status":"publish","type":"post","link":"https:\/\/www.puls200.de\/?p=3109","title":{"rendered":"The horrors of PHP"},"content":{"rendered":"\n<p>Wenn herauskommt, dass ich tats\u00e4chlich noch PHP bei manchen Kunden einsetze, bin ich vermutlich bald arbeitslos. Aber ich kann alles erkl\u00e4ren!!! Das hat.. historische Gr\u00fcnde. Und f\u00fcr manche Zwecke ist das Framework tats\u00e4chlich ziemlich brauchbar, vor allem aus dem Preis-Leistungswinkel heraus betrachtet.<\/p>\n\n\n\n<p>Heute ein kleines Schmankerl, das mich einen halben Tag gekostet hat und mit einem Schlag gegen die Stirn endete, den ich heute noch sp\u00fcre. Ausgangssituation ist die Bef\u00fcllung eines Array mit weiteren Strukturen (auch assoziative Arrays). Dabei werden manchmal neue Eintr\u00e4ge erzeugt, w\u00e4hrend in anderen F\u00e4llen ein bereits bestehender Eintrag erg\u00e4nzt wird.<\/p>\n\n\n\n<p>Consider this code:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n$main = array();\n\n$first = array(); \/\/ erster Eintrag\n$first&#x5B;&quot;bla&quot;] = &quot;blup&quot;;\n\n$main&#x5B;] = $first;\n\n\/\/ wenn man diesen Eintrag noch \u00e4ndern will\n$change_it = end($main);\n$change_it&#x5B;&quot;bla&quot;] = &quot;blip&quot;;\n\n\/\/ schaun wir mal\nprint_r($main);\n<\/pre><\/div>\n\n\n<p>Huch, immer noch \"blup\"! Ist klar, end() liefert nur eine Kopie. Man muss sich also eine Referenz holen. Dies gelingt mit dieser ziemlich \"eing\u00e4ngigen\" (h\u00f6h\u00f6) Syntax:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\nend($main);\n$change_it = &amp;$main&#x5B;key($main)];\n$change_it&#x5B;&quot;bla&quot;] = &quot;blip&quot;;\n<\/pre><\/div>\n\n\n<p>Jetzt ist es fein, in \"$main\" ist des nun korrekt mit \"blip\" \u00fcberschrieben. Doch damit nicht genug. Jetzt kommen wir zum eigentlichen Spezialisteneinsatz.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n\/\/ Ein weiteres Element hinzuf\u00fcgen\n$change_it = array();\n$change_it&#x5B;&quot;bla&quot;] = &quot;blop&quot;;\n$main&#x5B;] = $change_it;\n\/\/ schaun wir jetzt mal\nprint_r($main);\n<\/pre><\/div>\n\n\n<p>Ach du Sch****! Was ist denn hier passiert?<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n\nArray\n(\n    &#x5B;0] =&gt; Array\n        (\n            &#x5B;bla] =&gt; blop\n        )\n\n    &#x5B;1] =&gt; Array\n        (\n            &#x5B;bla] =&gt; blop\n        )\n)\n\n<\/pre><\/div>\n\n\n<p>Meine Erwartungshaltung w\u00e4re gewesen, dass durch die Zuweisung der Neuanlage des Arrays der Referenz-Bezug aufgehoben ist. Aber das ist nicht der Fall! F\u00fcge ich folgendes ein:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\nunset($change_it);\n<\/pre><\/div>\n\n\n<p>funktioniert es wie erwartet:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nArray\n(\n    &#x5B;0] =&gt; Array\n        (\n            &#x5B;bla] =&gt; blip\n        )\n\n    &#x5B;1] =&gt; Array\n        (\n            &#x5B;bla] =&gt; blop\n        )\n)\n\n<\/pre><\/div>\n\n\n<p>Man darf also nie vergessen, dass die <s>Normalit\u00e4t nur ein d\u00fcnner Schleier vor der Anarchie und dem Chaos is<\/s>t.. ne quatsch, ich meine nat\u00fcrlich PHP nur ein Wrapper \u00fcber eine C-Libary ist, deren haarige Knochen immer mal wieder hier und dort herausgucken. Musch halt wissa! Meine G\u00fcte.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn herauskommt, dass ich tats\u00e4chlich noch PHP bei manchen Kunden einsetze, bin ich vermutlich bald arbeitslos. Aber ich kann alles erkl\u00e4ren!!! Das hat.. historische Gr\u00fcnde. Und f\u00fcr manche Zwecke ist das Framework tats\u00e4chlich ziemlich brauchbar, vor allem aus dem Preis-Leistungswinkel &hellip; <a href=\"https:\/\/www.puls200.de\/?p=3109\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0},"categories":[20,4],"tags":[],"_links":{"self":[{"href":"https:\/\/www.puls200.de\/index.php?rest_route=\/wp\/v2\/posts\/3109"}],"collection":[{"href":"https:\/\/www.puls200.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.puls200.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.puls200.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.puls200.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3109"}],"version-history":[{"count":4,"href":"https:\/\/www.puls200.de\/index.php?rest_route=\/wp\/v2\/posts\/3109\/revisions"}],"predecessor-version":[{"id":3113,"href":"https:\/\/www.puls200.de\/index.php?rest_route=\/wp\/v2\/posts\/3109\/revisions\/3113"}],"wp:attachment":[{"href":"https:\/\/www.puls200.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3109"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.puls200.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3109"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.puls200.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3109"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}