มีความแตกต่างระหว่าง __DIR__ และ dirname (__ FILE__) ใน PHP หรือไม่?


122

ดูเหมือนกันสำหรับฉัน แต่ฉันไม่แน่ใจ

dirname(__FILE__)เพราะมีหลายโครงการที่ใช้

คำตอบ:


189

ผลของมันเหมือนกันทุกประการ ดังนั้นไม่มีความแตกต่างในเรื่องนั้น


ตัวอย่างเช่นสองบรรทัดต่อไปนี้:

var_dump(dirname(__FILE__));
var_dump(__DIR__);

ทั้งสองจะให้ผลลัพธ์เดียวกัน:

string '/home/squale/developpement/tests/temp' (length=37)


แต่มีความแตกต่างอย่างน้อยสองประการ:

  • __DIR__มีเฉพาะPHP> = 5.3
    • ซึ่งเป็นสาเหตุที่dirname(__FILE__)ใช้กันอย่างแพร่หลายมากขึ้น
  • __DIR__ได้รับการประเมินในเวลาคอมไพล์ในขณะที่dirname(__FILE__)หมายถึงฟังก์ชันเรียกใช้และได้รับการประเมิน ณ เวลาดำเนินการ
    • เพื่อให้__DIR__เป็น(หรือควรจะ)ได้เร็วขึ้น


ในฐานะที่เป็นข้อมูลอ้างอิงโปรดดูส่วนค่าคงที่ Magicของคู่มือ(การอ้างอิง) :

__DIR__: ไดเร็กทอรีของไฟล์
หากใช้ภายในการรวมไดเร็กทอรีของไฟล์ที่รวมจะถูกส่งกลับ
ซึ่งเทียบเท่ากับ dirname(__FILE__).
ชื่อไดเร็กทอรีนี้ไม่มีเครื่องหมายทับเว้นแต่ว่าจะเป็นไดเร็กทอรีราก
(เพิ่มใน PHP 5.3.0)


3
ไม่แน่ใจ แต่มันอยู่ที่นั่นมาระยะหนึ่งแล้ว(หน้าค่าคงที่ของ Magic ในคู่มือบอกว่า bahavior ได้รับการแก้ไขใน PHP 4.0.2 ดังนั้นฉันจะบอกว่ามันเคยอยู่ที่นั่นมาก่อน)
Pascal MARTIN

3
DIRและ dirname ( FILE ) ตัดเครื่องหมายทับสุดท้ายเสมอถูกต้องหรือไม่?
nkkollaw

3
ถูกต้องยกเว้นเมื่อเส้นทางทั้งหมดเป็น "/" ซึ่งในกรณีนี้จะไม่ตัดออก
Francisco Presencia

1
ฉันไม่แน่ใจว่าฉันเข้าใจถูกต้องหรือไม่: dirname ( _FILE_ )เป็นชื่อที่เร็วที่สุดใช่ไหม
Giacomo Tecya Pigani

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