{"id":218,"date":"2010-11-20T11:43:17","date_gmt":"2010-11-20T10:43:17","guid":{"rendered":"https:\/\/d-mueller.de\/blog\/?p=218"},"modified":"2011-01-23T13:21:47","modified_gmt":"2011-01-23T12:21:47","slug":"php-wtf-1","status":"publish","type":"post","link":"https:\/\/d-mueller.de\/blog\/php-wtf-1\/","title":{"rendered":"PHP WTF #1"},"content":{"rendered":"<p>Ohne viel Worte: was kommt bei dem Code raus?<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\nclass \u00e7\u00e5\u00e8\u00e4\u00df\u00e4\u00f6\u00fc\r\n{\r\n\tpublic static function weird()\r\n\t{\r\n\t\tfunction stuff()\r\n\t\t{\r\n\t\t\treturn 123;\r\n\t\t}\r\n\t}\r\n}\r\n\r\necho \u00e7\u00e5\u00e8\u00e4\u00df\u00e4\u00f6\u00fc::wEiRd().sTuFf();\r\necho \u00e7\u00e5\u00e8\u00e4\u00df\u00e4\u00f6\u00fc::weird().stuff();\r\n<\/pre>\n<p>Geballte &#8222;weirdness&#8220;. Wenn man jemandem so einen Schnippsel vorlegt und ihn laut nachdenken l\u00e4sst (Bewerbungsgespr\u00e4ch), stellen sich folgende Fragen<\/p>\n<ol>\n<li>Unicode in Klassennamen? Kann das gehen?<\/li>\n<li>Sind Funktionsnamen case sensitive?<\/li>\n<li>Nested Functions?<\/li>\n<li>Warum sind es 2 Calls?<\/li>\n<\/ol>\n<p><b>Und nun zu Aufl\u00f6sung:<\/b><\/p>\n<ol>\n<li>Das geht! Klassen, Funktionen und Variablen <strike>d\u00fcrfen unicode-Zeichen beinhalten<\/strike>. (<b>Richtigstellung:<\/b> Wie Fabian per Kommentar angemerkt hat, ist es kein &#8222;wirklicher&#8220; unicode, denn die verwendbaren Zeichen <a href=\"http:\/\/de.php.net\/manual\/de\/language.oop5.basic.php\">beschr\u00e4nken sich<\/a> auf den regul\u00e4ren Ausdruck\n<pre data-enlighter-language=\"enlighter\" class=\"EnlighterJSRAW\">[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*<\/pre>\n<p> Nat\u00fcrlich ist das nicht empfehlenswert, aber prinzipiell m\u00f6glich)<\/li>\n<li>Auch das haut hin. Funktionen und Variablen sind nicht case sensitive. Klassen dagegen schon. Allerdings sind Funktionen und Variablen nur dann nicht case sensitive, wenn &#8222;normale&#8220; Zeichen als Name verwendet werden. Hei\u00dft:\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\nfunction asd(){}\r\nAsD(); \/\/geht klar\r\n\r\nfunction \u00e4\u00f6\u00fc(){}\r\n\u00e4\u00d6\u00fc(); \/\/Fatal error: Call to undefined function \u00e4\u00d6\u00fc()\r\n<\/pre>\n<\/li>\n<li>Auch hier liegt noch nicht das Problem. Prinzipiell haut das hin&#8230;<\/li>\n<li>&#8230;, solang man nicht 2 mal die <strike>nested Function<\/strike> aufrufen muss, sonst: <b>Fatal error: Cannot redeclare stuff() (previously declared &#8230;)<\/b><br \/><b>Weitere korrigierende Darstellung<\/b> (Dank an Fabian): Defacto handelt es sich nicht um wirkliche nested functions sondern um eine Verkettung, die die &#8222;nested function&#8220; global deklariert. Deswegen klappt der Aufruf auch nur einmal ;).<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Ohne viel Worte: was kommt bei dem Code raus? class \u00e7\u00e5\u00e8\u00e4\u00df\u00e4\u00f6\u00fc { public static function weird() { function stuff() { return 123; } } } echo \u00e7\u00e5\u00e8\u00e4\u00df\u00e4\u00f6\u00fc::wEiRd().sTuFf(); echo \u00e7\u00e5\u00e8\u00e4\u00df\u00e4\u00f6\u00fc::weird().stuff(); Geballte &#8222;weirdness&#8220;. Wenn man jemandem so einen Schnippsel vorlegt und ihn &hellip; <a href=\"https:\/\/d-mueller.de\/blog\/php-wtf-1\/\">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,14,3],"tags":[],"class_list":["post-218","post","type-post","status-publish","format-standard","hentry","category-php","category-php-wtf","category-webdev"],"_links":{"self":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts\/218","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=218"}],"version-history":[{"count":0,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts\/218\/revisions"}],"wp:attachment":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/media?parent=218"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/categories?post=218"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/tags?post=218"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}