Sie sind hier : sebastian1012.bplaced.net/ homepage-neu / Themen-Blog1 / php-wtf-1.php

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 ;).