Was macht ein \ (Backslash) in PHP (5.3+)?

171

Was macht ein \in PHP?

Zum Beispiel CSRF4PHP hat \FALSE, \session_idund \Exception:

public function __construct($timeout=300, $acceptGet=\FALSE){
    $this->timeout = $timeout;
    if (\session_id()) {
        $this->acceptGet = (bool) $acceptGet;
    } else {
        throw new \Exception('Could not find session id', 1);
    }
}
Alfred
quelle
1
@ Mario sehr schönes Stackoverflow-Thema. Danke für den Link :)
Alfred
Ich denke, diese Frage sollte geschlossen werden, aber ich kann Themen nicht selbst schließen.
Alfred
5
Es ist ein Duplikat, aber keine schlechte Frage. Sie können dem Titel jedoch auch einen "Backslash" hinzufügen, damit Sie leichter nach jemand anderem googeln können.
Mario
1
Es ist wichtig zu wissen, dass sie den Boten nicht mehr erschießen. Wenn Sie herausfinden, was es ist, beschuldigen Sie uns nicht :) OH NEIN, ich bin ZU SPÄT.
Tim Post

Antworten:

246

\ (Backslash) ist das Namespace-Trennzeichen in PHP 5.3.

Ein \vor dem Beginn einer Funktion steht für den globalen Namespace .

Wenn Sie es dort ablegen, wird sichergestellt, dass die aufgerufene Funktion aus dem globalen Namespace stammt, auch wenn im aktuellen Namespace eine Funktion mit demselben Namen vorhanden ist.

Alan Geleynse
quelle
1
Vielen Dank! hast du es mit google gefunden oder wusstest du das schon: P?
Alfred
6
Fand es durch kluges googeln. Ich hatte noch keine Gelegenheit, PHP 5.3 zu verwenden und war an der Antwort interessiert. Es dauerte eine Minute, aber ich fand es.
Alan Geleynse
1
Begonnen mit php backslash, was mich zu einem Artikel über die Folgen der Auswahl als Namespace-Trennzeichen führte, dann php namespacebekam ich die Dokumentation.
Alan Geleynse
20
Das Googeln von "PHP Backslash vor Funktion" brachte mich hierher.
Igneosaurier
4
@igneosaur googeln "Ich bin ein Frontend-Entwickler und PHP ist erschreckend" brachte mich hierher
Telarian
22

Namespaces

In PHP 5.3+ wird das Backslash- \Symbol in Namespaces verwendet. Es ist das Startsymbol zur Angabe eines Namespace und dient auch als Trennzeichen zwischen Sub-Namespace-Namen.

Siehe offizielle Dokumentation zum Namespace .

Opcache

Zusätzlich werden in PHP 7.0+ einige Funktionen durch OPCache durch Opcodes ersetzt , wodurch diese spezifischen Funktionen viel schneller ausgeführt werden. Dies funktioniert jedoch nur, wenn die Funktionen im Root-Namespace platziert sind. Siehe diese Diskussion zu diesem Thema. Neben dem Namespace \wirkt sich dies indirekt auch auf die Codeoptimierung aus.

Die folgenden nativen Funktionen profitieren von diesem Effekt:

"array_slice"
"assert"
"boolval"
"call_user_func"
"call_user_func_array"
"chr"
"count"
"defined"
"doubleval"
"floatval"
"func_get_args"
"func_num_args"
"get_called_class"
"get_class"
"gettype"
"in_array"
"intval"
"is_array"
"is_bool"
"is_double"
"is_float"
"is_int"
"is_integer"
"is_long"
"is_null"
"is_object"
"is_real"
"is_resource"
"is_string"
"ord"
"strlen"
"strval"
Webber
quelle
21

Um mögliche Verwirrung zu klären:

Der Backslash impliziert keine Klassenvererbung .

Im Folgenden Animal, Dog, Shepherdmüssen keine Klassen, sondern einfach Namespaces . Dies bedeutet, dass Namen gruppiert werden, um Namenskollisionen zu vermeiden .

$myDog = new \Animal\Dog\Shepherd\GermanShepherd();

Das führende \Mittel Animalwurde im globalen Geltungsbereich deklariert.

Nelu
quelle