Apa yang dilakukan \ (backslash) dalam PHP (5.3+)?

172

Apa yang \dilakukan di PHP?

Misalnya, CSRF4PHP memiliki \FALSE, \session_id, dan \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
sumber
1
@ Mario topik stackoverflow sangat bagus. Terima kasih atas tautannya :)
Alfred
Saya kira pertanyaan ini harus ditutup, tetapi saya sendiri tidak dapat menutup topik ..
Alfred
5
Ini duplikat, tapi bukan pertanyaan yang buruk. Tapi Anda bisa menambahkan "backslash" ke judul, sehingga menjadi lebih mudah untuk Google untuk orang lain.
mario
1
Penting untuk disadari, mereka tidak menembak utusan itu lagi. Ketika Anda mencari tahu apa itu, jangan salahkan kami :) OH TIDAK, AKU TERLAMBAT.
Tim Post

Jawaban:

247

\ (backslash) adalah pemisah namespace di PHP 5.3.

A \sebelum awal suatu fungsi merepresentasikan Global Namespace .

Menempatkannya di sana akan memastikan bahwa fungsi yang dipanggil dari global namespace, bahkan jika ada fungsi dengan nama yang sama di namespace saat ini.

Alan Geleynse
sumber
1
Terima kasih! apakah Anda menemukannya menggunakan google atau Anda sudah tahu ini: P?
Alfred
6
Menemukannya melalui googling yang pintar. Saya belum memiliki kesempatan untuk menggunakan PHP 5.3 dan tertarik pada jawabannya. Butuh waktu sebentar tapi saya menemukannya.
Alan Geleynse
1
Dimulai dengan php backslashyang menuntun saya ke sebuah artikel tentang kegagalan memilihnya sebagai pemisah namespace, lalu php namespacemendapatkan saya dokumentasi.
Alan Geleynse
20
Googling "php backslash before function" membawa saya ke sini.
igneosaur
4
@igneosaur googling "Saya seorang frontend dev dan PHP menakutkan" membawa saya ke sini
Telarian
23

Ruang nama

Dalam PHP 5.3+ \simbol backslash digunakan dalam ruang nama. Ini adalah simbol awal untuk menunjukkan namespace dan juga berfungsi sebagai pemisah antara nama-nama sub-namespace.

Lihat dokumentasi resmi tentang penempatan nama .

Opcache

Selain itu di PHP 7.0+ beberapa fungsi diganti dengan opcodes oleh OPCache , yang membuat fungsi spesifik ini berjalan jauh lebih cepat. Namun ini hanya berfungsi ketika fungsi ditempatkan di namespace root. Lihat diskusi ini tentang topik ini. Jadi selain namespacing, \secara tidak langsung juga mempengaruhi optimasi kode.

Fungsi asli berikut mendapat manfaat dari efek ini:

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

Untuk memperjelas potensi kebingungan:

Garis miring terbalik tidak menyiratkan warisan kelas .

Dalam berikut, Animal, Dog, Shepherdtidak harus kelas, tetapi hanya ruang nama . Berarti sesuatu yang digunakan untuk mengelompokkan nama bersama untuk menghindari penamaan tabrakan .

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

\Sarana utama Animaldinyatakan dalam ruang lingkup global.

Nelu
sumber