O que um \ (barra invertida) faz no PHP (5.3+)?

172

O que faz um \PHP?

Por exemplo, CSRF4PHP tem \FALSE, \session_ide \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
fonte
1
@ mario muito bom stackoverflow tópico. Obrigado pelo link :)
Alfred
Eu acho que essa pergunta deve ser encerrada, mas eu não consigo fechar os tópicos ..
Alfred
5
É uma pergunta duplicada, mas não ruim. Mas você pode adicionar "barra invertida" ao título, para que fique mais fácil pesquisar no Google para outra pessoa.
mario
1
É importante perceber que eles não atiram mais no mensageiro. Quando você descobrir o que é, não nos culpe :) OH NÃO, ESTOU MUITO TARDE.
Tim Post

Respostas:

247

\ (barra invertida) é o separador de namespace no PHP 5.3.

A \antes do início de uma função representa o Global Namespace .

Colocá-lo lá garantirá que a função chamada seja do espaço para nome global, mesmo se houver uma função com o mesmo nome no espaço para nome atual.

Alan Geleynse
fonte
1
Obrigado! você o encontrou usando o google ou você já sabia disso: P?
Alfred
6
Encontrei através de uma pesquisa inteligente. Ainda não tive a chance de usar o PHP 5.3 e estava interessado na resposta. Demorou um minuto, mas eu achei.
precisa saber é o seguinte
1
Começou com o php backslashque me levou a um artigo sobre as consequências de selecioná-lo como separador de namespace e depois php namespaceme deu a documentação.
27711 Alan Alan
20
Pesquisando "a barra invertida do php antes da função" me trouxe aqui.
Igneosaur #
4
@igneosaur googling "Eu sou um dev frontend e PHP é aterrorizante" me trouxe aqui
Telarian
23

Namespaces

No PHP 5.3 ou superior, o \símbolo de barra invertida é usado nos espaços para nome. É o símbolo de início para indicar um espaço para nome e também serve como um separador entre os nomes dos subdomínios.

Consulte a documentação oficial sobre namespacing .

Opcache

Além disso, no PHP 7.0 ou superior, algumas funções são substituídas por OPCache pelo OPCache , o que torna essas funções específicas muito mais rápidas. No entanto, isso só funciona quando as funções são colocadas no espaço para nome raiz. Veja esta discussão sobre este tópico. Portanto, além do namespace, o \indiretamente também afeta a otimização do código.

As seguintes funções nativas se beneficiam desse efeito:

"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
fonte
22

Para esclarecer possíveis confusões:

A barra invertida não implica herança de classe .

No seguinte, Animal, Dog, Shepherdnão tem que ser classes, mas simplesmente namespaces . Significado de algo usado para agrupar nomes para evitar colisões de nomes .

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

Os principais \meios Animalforam declarados no escopo global.

Nelu
fonte