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

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.


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"

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.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.