\ (แบ็กสแลช) ทำอะไรใน PHP (5.3+)


172

สิ่งที่จะ\ทำใน PHP?

ยกตัวอย่างเช่นCSRF4PHPมี\FALSE, \session_idและ\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 หัวข้อ stackoverflow ที่ดีมาก ขอขอบคุณสำหรับการเชื่อมโยง :)
อัลเฟรด

ฉันเดาว่าคำถามนี้ควรจะปิด แต่ฉันไม่สามารถปิดหัวข้อตัวเอง ..
อัลเฟรด

5
มันเป็นคำถามที่ซ้ำกัน แต่ไม่ใช่คำถามที่ไม่ดี แต่คุณสามารถเพิ่ม "แบ็กสแลช" ลงในชื่อได้ดังนั้นจะง่ายกว่าที่ Google จะให้คนอื่น
มาริโอ

1
เป็นเรื่องสำคัญที่จะต้องตระหนักว่าพวกเขาไม่ได้ยิงผู้ส่งสารอีกต่อไป เมื่อคุณพบว่ามันคืออะไรอย่าโทษพวกเรา :) ไม่นะฉันจะไปเร็วเกินไป
ทิมโพสต์

คำตอบ:


247

\ (แบ็กสแลช) เป็นตัวคั่นเนมสเปซใน PHP 5.3

\ก่อนที่จะเริ่มการทำงานหมายถึงnamespace โลก

วางไว้ที่นั่นเพื่อให้แน่ใจว่าฟังก์ชั่นที่เรียกว่ามาจาก namespace ทั่วโลกแม้ว่าจะมีฟังก์ชั่นโดยใช้ชื่อเดียวกันใน namespace ปัจจุบัน


1
ขอบคุณ! คุณพบมันโดยใช้ google หรือคุณรู้เรื่องนี้อยู่แล้ว: P
อัลเฟรด

6
พบมันผ่าน googling ที่ฉลาด ฉันยังไม่ได้มีโอกาสใช้ PHP 5.3 และสนใจคำตอบ ใช้เวลาสักครู่ แต่ฉันพบมัน
Alan Geleynse

1
เริ่มต้นphp backslashซึ่งนำฉันไปที่บทความเกี่ยวกับ fallout ของการเลือกเป็นตัวคั่นเนมสเปซจากนั้นphp namespaceให้เอกสารมาให้ฉัน
Alan Geleynse

20
Googling "แบ็กสแลช PHP ก่อนหน้าที่" นำฉันมาที่นี่
Igneosaur

4
@igneosaur googling "ฉันเป็นนักพัฒนาที่ดีเยี่ยมและ PHP นั้นยอดเยี่ยม" นำฉันมาที่นี่
Telarian

23

namespaces

ใน PHP 5.3+ \สัญลักษณ์แบ็กสแลชจะใช้ในเนมสเปซ เป็นสัญลักษณ์เริ่มต้นเพื่อระบุเนมสเปซและยังทำหน้าที่เป็นตัวคั่นระหว่างชื่อย่อยเนมสเปซ

ดูเอกสารอย่างเป็นทางการเกี่ยวกับ namespacing

Opcache

นอกจากนี้ใน PHP 7.0+ บางฟังก์ชั่นจะถูกแทนที่ด้วย opcodesโดยOPCacheซึ่งทำให้ฟังก์ชันเฉพาะเหล่านี้ทำงานได้เร็วขึ้นมาก อย่างไรก็ตามสิ่งนี้จะทำงานได้ก็ต่อเมื่อฟังก์ชั่นถูกวางไว้ในรูทเนมสเปซ ดูการสนทนาเกี่ยวกับหัวข้อนี้ ดังนั้นนอกเหนือจาก namespacing ที่\อ้อมยังมีผลต่อการเพิ่มประสิทธิภาพรหัส

ฟังก์ชันเนทีฟต่อไปนี้ได้รับประโยชน์จากเอฟเฟกต์นี้:

"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

เพื่อชี้แจงความสับสนที่อาจเกิดขึ้น:

เครื่องหมายไม่ได้บ่งบอกถึงมรดกระดับ

ในต่อไปนี้Animal, Dog, Shepherdไม่ต้องมีการเรียน แต่เพียงnamespaces ความหมายอะไรบางอย่างที่ใช้ในการชื่อกลุ่มร่วมกันเพื่อหลีกเลี่ยงการตั้งชื่อชน

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

ที่นำ\วิธีการที่Animalได้รับการประกาศในขอบเขตทั่วโลก


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.