Hier im Forum bekommt ihr bei euren fragen schnelle hilfe.Hier geht es rund um das Web SeitenProgrammieren.Alles rund ums Javascript,Html,Php,Css und Sql.Auf fast allen Fragen haben wir eine Antwort.
Der Soforthilfe-chat verspricht das ,was sein Name sagt. Hier sind Leute Online die sofort ihre hilfe anbieten.Seht in der OnlineListe nach und wenn einer Online ist werdet ihr auch antwort bekommen. Admine ,Moderatoren und Helfer sind unsere Spezialisten in Sachen Web Programierung
71 Unwetterwarnungen in Deutschland
Die Datenbank wurde zuletzt am 02.08.2020 17:34:28 aktualiesiert
71

PHP WTF #1

Ohne viel Worte: was kommt bei dem Code raus?

class çåèäßäöü { 	public static function weird() 	{ 		function stuff() 		{ 			return 123; 		} 	} }  echo çåèäßäöü::wEiRd().sTuFf(); echo çåèäßäöü::weird().stuff(); 

Geballte „weirdness“. Wenn man jemandem so einen Schnippsel vorlegt und ihn laut nachdenken lässt (Bewerbungsgespräch), stellen sich folgende Fragen

  1. Unicode in Klassennamen? Kann das gehen?
  2. Sind Funktionsnamen case sensitive?
  3. Nested Functions?
  4. Warum sind es 2 Calls?

Und nun zu Auflösung:

  1. Das geht! Klassen, Funktionen und Variablen dürfen unicode-Zeichen beinhalten. (Richtigstellung: Wie Fabian per Kommentar angemerkt hat, ist es kein „wirklicher“ unicode, denn die verwendbaren Zeichen beschränken sich auf den regulären Ausdruck [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]* Natürlich ist das nicht empfehlenswert, aber prinzipiell möglich)
  2. 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 „normale“ Zeichen als Name verwendet werden. Heißt:
    function asd(){} AsD(); //geht klar  function äöü(){} äÖü(); //Fatal error: Call to undefined function äÖü() 
  3. Auch hier liegt noch nicht das Problem. Prinzipiell haut das hin…
  4. …, solang man nicht 2 mal die nested Function aufrufen muss, sonst: Fatal error: Cannot redeclare stuff() (previously declared …)
    Weitere korrigierende Darstellung (Dank an Fabian): Defacto handelt es sich nicht um wirkliche nested functions sondern um eine Verkettung, die die „nested function“ global deklariert. Deswegen klappt der Aufruf auch nur einmal ;).