Co robi \ (ukośnik odwrotny) w PHP (5.3+)?

172

Co robi \w PHP?

Na przykład, CSRF4PHP ma \FALSE, \session_idi \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
źródło
1
@mario bardzo fajny temat stackoverflow. Dzięki za link :)
Alfred
Myślę, że to pytanie powinno być zamknięte, ale sam nie mogę zamknąć tematów ..
Alfred
5
To duplikat, ale niezłe pytanie. Ale możesz dodać „odwrotny ukośnik” do tytułu, aby łatwiej było znaleźć kogoś w Google.
mario
1
Ważne jest, aby zdać sobie sprawę, że nie strzelają już do posłańca. Kiedy dowiesz się, co to jest, nie wiń nas :) O NIE, jestem ZA PÓŹNO.
Tim Post

Odpowiedzi:

247

\ (odwrotny ukośnik) to separator przestrzeni nazw w PHP 5.3.

Znak \przed początkiem funkcji reprezentuje globalną przestrzeń nazw .

Umieszczenie go tam zapewni, że wywoływana funkcja pochodzi z globalnej przestrzeni nazw, nawet jeśli istnieje funkcja o tej samej nazwie w bieżącej przestrzeni nazw.

Alan Geleynse
źródło
1
Dzięki! czy znalazłeś to za pomocą google czy już wiedziałeś: P?
Alfred,
6
Znalazłem to dzięki sprytnemu googlowaniu. Nie miałem jeszcze okazji korzystać z PHP 5.3 i zainteresowała mnie odpowiedź. Zajęło mi to chwilę, ale znalazłem to.
Alan Geleynse,
1
Zacząłem od tego, php backslashco doprowadziło mnie do artykułu o skutkach wybrania go jako separatora przestrzeni nazw, a następnie php namespacedostałem dokumentację.
Alan Geleynse,
20
Wygooglowanie „php odwrotnego ukośnika przed funkcją” sprowadziło mnie tutaj.
igneozaur
4
@igneosaur googling „Jestem programistą frontendowym, a PHP jest przerażające” sprowadził mnie tutaj
Telarian
23

Przestrzenie nazw

W PHP 5.3+ \znak ukośnika odwrotnego jest używany w przestrzeniach nazw. Jest to symbol początkowy wskazujący przestrzeń nazw, a także służy jako separator między nazwami podprzestrzeni nazw.

Zobacz oficjalną dokumentację dotyczącą przestrzeni nazw .

Opcache

Dodatkowo w PHP 7.0+ niektóre funkcje zostały zastąpione opcodes przez OPCache , co sprawia, że ​​te specyficzne funkcje działają znacznie szybciej. Jednak działa to tylko wtedy, gdy funkcje są umieszczone w głównej przestrzeni nazw. Zobacz tę dyskusję na ten temat. Więc oprócz przestrzeni nazw, \pośrednio wpływa również na optymalizację kodu.

Z tego efektu korzystają następujące funkcje natywne:

"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
źródło
22

Aby wyjaśnić potencjalne zamieszanie:

Ukośnik odwrotny nie oznacza dziedziczenia klas .

W dalszej części Animal, Dog, Shepherdnie muszą być klasy, ale po prostu nazw . Oznacza coś, co służy do grupowania nazw w celu uniknięcia kolizji nazw .

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

Wiodący \środek Animalzostał zadeklarowany w zakresie globalnym.

Nelu
źródło