Що робить \ (зворотний кут) у 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
Це дублікат, але не поганий питання. Але ви можете додати "зворотну косу рису" до заголовка, тому Google стає легше переглядати Google.
Маріо

1
Важливо усвідомити, що вони більше не стріляють у месенджер. Коли ви дізнаєтесь, що це таке, не звинувачуйте нас :) О, НІ, Я ТУТИ НІКОЛИ.
Тім Пост

Відповіді:


247

\ (зворотна косою рисою) - це роздільник простору імен у PHP 5.3.

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

Якщо розмістити його там, ви будете гарантувати, що функція, що викликається, є з глобального простору імен, навіть якщо є функція з тим самим іменем у поточному просторі імен.


1
Дякую! ти знайшов це за допомогою google чи ти це вже знав: P?
Альфред

6
Знайшов це через спритний гуглінг. У мене ще не було можливості використовувати PHP 5.3 і мене зацікавила відповідь. Взяв хвилину, але я знайшов.
Алан Геленсе

1
Почав, з php backslashякого я підвів статтю про помилку вибору її як роздільника простору імен, потім php namespaceотримав мені документацію.
Алан Геленсе

20
Гуглінг "PHP зворотній косої перед функцією" привів мене сюди.
igneosaur

4
@igneosaur googling "Я заграваючий дев, і PHP страшно" привів мене сюди
Телярій

23

Простори імен

У PHP 5.3+ \символ зворотної косої риси використовується в просторах імен. Це символ запуску для позначення простору імен, а також служить роздільником між іменами під-імен.

Дивіться офіційну документацію щодо простору імен .

Опчаче

Крім того, в 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було оголошено в глобальному масштабі.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.