{"id":553,"date":"2011-03-28T22:38:49","date_gmt":"2011-03-28T20:38:49","guid":{"rendered":"https:\/\/d-mueller.de\/blog\/?p=553"},"modified":"2011-03-28T23:10:00","modified_gmt":"2011-03-28T21:10:00","slug":"php-array-dereferencing-ausprobiert","status":"publish","type":"post","link":"https:\/\/d-mueller.de\/blog\/php-array-dereferencing-ausprobiert\/","title":{"rendered":"PHP Array Dereferencing ausprobiert"},"content":{"rendered":"<p>Ich konnte es nicht lassen und hab mir den <a href=\"http:\/\/svn.php.net\/viewvc\/php\/php-src\/trunk\/\">PHP Trunk<\/a> draufgemacht, um mal etwas mit dem Dereferencing herumzuspielen. Die Version im Trunk h\u00f6rt auf <i>5.3.99<\/i> und kann f\u00fcr die SVN-faulen als <a href=\"http:\/\/snaps.php.net\/\">Snapshot hier geladen werden<\/a>. Gleich mal etwas <b>Konsolenromantik<\/b>:<\/p>\n<pre data-enlighter-language=\"bash\" class=\"EnlighterJSRAW\">\r\ndav@david:\/var\/www$ php --version\r\nPHP 5.3.99-dev (cli) (built: Mar 28 2011 21:51:08) \r\nCopyright (c) 1997-2011 The PHP Group\r\nZend Engine v2.4.0, Copyright (c) 1998-2011 Zend Technologies\r\ndav@david:\/var\/www$ cat dereferencing.php \r\n&lt;?php \r\nfunction test()\r\n{\r\n    return array(&quot;foo&quot; =&gt; &quot;bar&quot;);\r\n}\r\n\r\nprint &quot;Output: &quot; . test()[&quot;foo&quot;] . &quot;\\n&quot;;\r\ndav@david:\/var\/www$ php dereferencing.php \r\nOutput: bar \r\n<\/pre>\n<p>Joa, was soll ich sagen? Geht alles genauso, wie man sich das w\u00fcnscht. Um mal ein komplexeres, sinnloses Beispiel auf den Tisch zu legen:<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\n&lt;?php \r\nclass Calc\r\n{\r\n    public static function getClosureManager()\r\n    {\r\n        return new ClosureManager;\r\n    }\r\n}\r\n\r\nclass ClosureManager\r\n{\r\n    function getSquareClosure()\r\n    {\r\n        return array(&quot;closure&quot; =&gt; function($s) \r\n        { \r\n            return array(&quot;result&quot; =&gt; $s * $s); \r\n        });\r\n    }\r\n}\r\n\r\n\r\n$c = Calc::getClosureManager()-&gt;getSquareClosure()[&quot;closure&quot;];\r\nprint $c(4)[&quot;result&quot;] . &quot;\\n&quot;;\r\n<\/pre>\n<p>Geht also auch mit Closures und all dem OOP Schnickschnack. Bei der Bastelei sind mir auch gleich wieder <b>2 neue W\u00fcnsche eingefallen<\/b>.<\/p>\n<h2>Ich h\u00e4tte gerne&#8230;<\/h2>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\nclass Calc\r\n{\r\n    function square($s)\r\n    {\r\n        return $s * $s;\r\n    }\r\n}\r\n\r\nprint (new Calc)-&gt;square(4);\r\n<\/pre>\n<p>Java hat da kein Problem mit. Und dann noch das (zugegebenma\u00dfen eher akademische, aus Javascript bekannte) Konstrukt:<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\nfunction getClosure()\r\n{\r\n    return function($s)\r\n    {\r\n        return $s * $s;\r\n    }\r\n}\r\n\r\nprint getClosure()(5);\r\n<\/pre>\n<p>Also eine zur\u00fcckgegebene Closure direkt aufrufen k\u00f6nnen, ohne sie vorher in einer Variable zwischenspeichern zu m\u00fcssen. Aber sterben werde ich auch so nicht.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ich konnte es nicht lassen und hab mir den PHP Trunk draufgemacht, um mal etwas mit dem Dereferencing herumzuspielen. Die Version im Trunk h\u00f6rt auf 5.3.99 und kann f\u00fcr die SVN-faulen als Snapshot hier geladen werden. Gleich mal etwas Konsolenromantik: &hellip; <a href=\"https:\/\/d-mueller.de\/blog\/php-array-dereferencing-ausprobiert\/\">Weiterlesen <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":{"footnotes":""},"categories":[4,3],"tags":[],"class_list":["post-553","post","type-post","status-publish","format-standard","hentry","category-php","category-webdev"],"_links":{"self":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts\/553","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/comments?post=553"}],"version-history":[{"count":0,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts\/553\/revisions"}],"wp:attachment":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/media?parent=553"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/categories?post=553"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/tags?post=553"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}