Czy jest jakaś różnica między __DIR__ a dirname (__ FILE__) w PHP?

122

U mnie wygląda tak samo, ale nie jestem pewien

ponieważ istnieje wiele projektów, które używają dirname(__FILE__).

user198729
źródło

Odpowiedzi:

189

Ich wynik jest dokładnie taki sam ; więc nie ma różnicy.


Na przykład dwa następujące wiersze:

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

Oba dadzą ten sam wynik:

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


Ale są co najmniej dwie różnice:

  • __DIR__istnieje tylko z PHP> = 5.3
    • dlatego dirname(__FILE__)jest szerzej stosowany
  • __DIR__ jest oceniany w czasie kompilacji, podczas gdy dirname(__FILE__) oznacza wywołanie funkcji i jest oceniany w czasie wykonywania
    • więc __DIR__jest (lub powinno być) szybsze.


Jako odniesienie, zobacz sekcję Magiczne stałe w podręczniku (cytowanie) :

__DIR__: Katalog pliku.
W przypadku użycia wewnątrz dołączenia zwracany jest katalog dołączonego pliku.
Jest to równoważne z dirname(__FILE__).
Ta nazwa katalogu nie ma końcowego ukośnika, chyba że jest to katalog główny.
(Dodano w PHP 5.3.0.)

Pascal MARTIN
źródło
3
Nie jestem pewien, ale istnieje już od jakiegoś czasu (strona Magic constants w podręczniku mówi, że jego zachowanie zostało zmodyfikowane w PHP 4.0.2; więc powiedziałbym, że było tam wcześniej)
Pascal MARTIN
3
DIR i dirname ( FILE ) zawsze usuwają ostatni ukośnik, prawda?
nkkollaw
3
Prawidłowo, z wyjątkiem sytuacji, gdy cała ścieżka to „/”, w takim przypadku nie usuwają tego.
Francisco Presencia,
1
Nie jestem pewien, czy dobrze zrozumiałem: dirname ( _FILE_ ) jest najszybszy, prawda?
Giacomo Tecya Pigani
7
@GiacomoTecyaPigani nie, __DIR__jest szybszy.
Nico