Что делает \ (обратная косая черта) в PHP (5.3+)?

172

Что делает \в PHP?

Например, CSRF4PHP есть \FALSE, \session_idи \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 очень хорошая тема stackoverflow. Спасибо за ссылку :)
Альфред
Я думаю, этот вопрос должен быть закрыт, но я не могу сам закрывать темы ..
Альфред
5
Это дубликат, но не плохой вопрос. Но вы можете добавить к названию "обратную косую черту", чтобы стало проще гуглить кого-то другого.
Марио
1
Важно понимать, что они больше не стреляют в мессенджера. Когда вы узнаете, что это, не вините нас :) О, нет, я слишком поздно.
Тим Пост

Ответы:

247

\ (обратная косая черта) - это разделитель пространства имен в PHP 5.3.

A \перед началом функции представляет глобальное пространство имен .

Помещение его туда гарантирует, что вызываемая функция происходит из глобального пространства имен, даже если в текущем пространстве имен есть функция с тем же именем.

Алан Гелейнсе
источник
1
Спасибо! Вы нашли это с помощью Google или вы уже знали это: P?
Альфред
6
Нашел это с помощью умного поиска в Google. У меня еще не было возможности использовать PHP 5.3, и я был заинтересован в ответе. Прошло минуту, но я нашел это.
Алан Гелейнсе
1
Начал с того, php backslashчто привел меня к статье о последствиях выбора его в качестве разделителя пространства имен, затем php namespaceполучил мне документацию.
Алан Гелейнсе
20
Гугл "php backslash перед функцией" привел меня сюда.
Нейзавр
4
@igneosaur googling «Я разработчик внешнего интерфейса, а PHP ужасен» привел меня сюда
Telarian
23

Пространства имен

В PHP 5.3+ \символ обратной косой черты используется в пространствах имен. Это начальный символ для обозначения пространства имен, который также служит разделителем между именами подпространств имен.

Смотрите официальную документацию о пространстве имен .

Opcache

Кроме того, в PHP 7.0+ некоторые функции заменены кодами операций на OPCache , что делает эти специальные функции намного быстрее. Однако это работает только тогда, когда функции помещены в корневое пространство имен. Смотрите эту дискуссию на эту тему. Таким образом, помимо пространства имен, \косвенно также влияет на оптимизацию кода.

Следующие нативные функции извлекают выгоду из этого эффекта:

"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"
Уэббер
источник
22

Чтобы прояснить потенциальную путаницу:

Обратная косая черта не подразумевает наследование классов .

В дальнейшем Animal, Dog, Shepherdне должны быть классы, но просто пространств имен . Имеется в виду что-то, что использовалось для группировки имен во избежание коллизий имен .

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

Ведущие \средства Animalбыли объявлены в глобальном масштабе.

Нелу
источник