Que fait une \ (barre oblique inverse) en PHP (5.3+)?

172

Que fait un \en PHP?

Par exemple, CSRF4PHP a \FALSE, \session_idet \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
la source
1
@mario très beau sujet de stackoverflow. Merci pour le lien :)
Alfred
Je suppose que cette question devrait être fermée, mais je ne peux pas fermer les sujets moi-même ..
Alfred
5
C'est un doublon, mais pas une mauvaise question. Mais vous pouvez ajouter une "barre oblique inverse" au titre, de sorte qu'il devient plus facile de rechercher sur Google pour quelqu'un d'autre.
mario
1
Il est important de se rendre compte qu'ils ne tirent plus sur le messager. Quand tu découvriras ce que c'est, ne nous blâme pas :) OH NON, je suis TROP TARD.
Tim Post

Réponses:

247

\ (barre oblique inverse) est le séparateur d'espace de noms dans PHP 5.3.

Un \avant le début d'une fonction représente l' espace de noms global .

Le placer là garantira que la fonction appelée provient de l'espace de noms global, même s'il existe une fonction du même nom dans l'espace de noms actuel.

Alan Geleynse
la source
1
Merci! l'avez-vous trouvé en utilisant google ou le saviez-vous déjà: P?
Alfred
6
Je l'ai trouvé grâce à une recherche intelligente sur Google. Je n'ai pas encore eu l'occasion d'utiliser PHP 5.3 et j'étais intéressé par la réponse. Cela a pris une minute mais je l'ai trouvé.
Alan Geleynse
1
Cela php backslashm'a conduit à un article sur les retombées de sa sélection comme séparateur d'espace de noms, puis php namespacej'ai obtenu la documentation.
Alan Geleynse
20
Google "barre oblique inverse php avant la fonction" m'a amené ici.
igneosaur
4
@igneosaur googling "Je suis un développeur frontend et PHP est terrifiant" m'a amené ici
Telarian
23

Espaces de noms

Dans PHP 5.3+, le \symbole de la barre oblique inverse est utilisé dans les espaces de noms. C'est le symbole de début pour indiquer un espace de noms et sert également de séparateur entre les noms de sous-espaces de noms.

Voir la documentation officielle sur l' espacement des noms .

Opcache

De plus, dans PHP 7.0+, certaines fonctions sont remplacées par des opcodes par OPCache , ce qui rend ces fonctions spécifiques beaucoup plus rapides. Cependant, cela ne fonctionne que lorsque les fonctions sont placées dans l'espace de noms racine. Consultez cette discussion sur ce sujet. Ainsi, en plus de l'espace de noms, cela \affecte indirectement l'optimisation du code.

Les fonctions natives suivantes bénéficient de cet effet:

"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
la source
22

Pour clarifier la confusion potentielle:

La barre oblique inverse ne signifie l' héritage de classe .

Dans ce qui suit, Animal, Dog, Shepherdne doivent pas être des classes, mais simplement des espaces de noms . Ce qui signifie quelque chose utilisé pour regrouper les noms pour éviter les collisions de noms .

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

Le principal \moyen a Animalété déclaré dans la portée globale.

Nelu
la source