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

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.


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"

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.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.