¿Qué hace una \ (barra diagonal inversa) en PHP (5.3+)?


172

¿Qué hace un \PHP?

Por ejemplo, CSRF4PHP tiene \FALSE, \session_idy \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 muy buen tema stackoverflow. Gracias por el enlace :)
Alfred

Supongo que esta pregunta debería estar cerrada, pero no puedo cerrar los temas yo mismo ..
Alfred

55
Es un duplicado, pero no es una mala pregunta. Pero puede agregar "barra diagonal inversa" al título, por lo que es más fácil buscar en Google para otra persona.
mario

1
Es importante darse cuenta, ya no le disparan al mensajero. Cuando descubras de qué se trata, no nos culpes :) OH NO, ESTOY TARDE.
Tim Post

Respuestas:


247

\ (barra invertida) es el separador de espacio de nombres en PHP 5.3.

A \antes del comienzo de una función representa el espacio de nombres global .

Ponerlo allí asegurará que la función llamada sea del espacio de nombres global, incluso si hay una función con el mismo nombre en el espacio de nombres actual.


1
¡Gracias! ¿Lo encontraste usando google o ya sabías esto: P?
Alfred

66
Lo encontré a través de google inteligente. Todavía no he tenido la oportunidad de usar PHP 5.3 y estaba interesado en la respuesta. Tomó un minuto pero lo encontré.
Alan Geleynse el

1
Comencé con lo php backslashque me llevó a un artículo sobre las consecuencias de seleccionarlo como el separador de espacio de nombres, luego php namespaceme dio la documentación.
Alan Geleynse el

20
Buscar en Google "barra diagonal inversa antes de la función" me trajo aquí.
igneosaur

44
@igneosaur googleando "Soy un desarrollador frontend y PHP es aterrador" me trajo aquí
Telarian

23

Espacios de nombres

En PHP 5.3+, el \símbolo de barra invertida se usa en espacios de nombres. Es el símbolo de inicio para indicar un espacio de nombres y también sirve como separador entre los nombres de los subespacios de nombres.

Consulte la documentación oficial sobre el espacio de nombres .

Opcache

Además, en PHP 7.0+, OPCache reemplaza algunas funciones con códigos de operación , lo que hace que estas funciones específicas se ejecuten mucho más rápido. Sin embargo, esto solo funciona cuando las funciones se colocan en el espacio de nombres raíz. Vea esta discusión sobre este tema. Entonces, además del espacio de nombres, \indirectamente también afecta la optimización del código.

Las siguientes funciones nativas se benefician de este efecto:

"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

Para aclarar la posible confusión:

La barra diagonal inversa no implica herencia de clase .

En lo que sigue, Animal, Dog, Shepherdno tiene que haber clases, sino simplemente espacios de nombres . Lo que significa algo usado para agrupar nombres para evitar nombrar colisiones .

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

El \medio principal Animalfue declarado en el ámbito global.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.