¿Qué hace una (barra invertida) en PHP (5.3+)?


¿Qué hace un \ en PHP?

Por ejemplo, CSRF4PHP tiene \FALSE, \session_id, y \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);
    }
}
Author: Webber, 2011-01-25

4 answers

\ (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.

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

 152
Author: Alan Geleynse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-27 01:29:15

Para aclarar la confusión potencial:

La barra invertida no implica herencia de clase.

En el siguiente, Animal, Dog, Shepherd no tienen que ser clases, sino simplemente espacios de nombres. Significa algo usado para agrupar nombres para evitar nombrar colisiones.

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

El principal \ significa Animal fue declarado en el ámbito global.

 10
Author: Nelu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:44

El \ se usa en PHP 5.3 para espacios de nombres. Véase http://www.php.net/manual/en/language.namespaces.rationale.php para más información sobre espacios de nombres y PHP.

 7
Author: Damian Galarza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-25 04:38:30

Espacios de nombres

En PHP 5.3+ el símbolo de barra invertida \ se usa en los 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.

Ver documentación oficial sobre namespacing.

Opcache

Además en PHP 7.0+ algunas funciones son reemplazadas por opcodes por OPcache, 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. Ver esto debate sobre este tema. Así que además del espacio de nombres, el \ 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"
 5
Author: Webber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-19 08:49:03