Gibt es einen Unterschied zwischen __DIR__ und dirname (__ FILE__) in PHP?

122

Für mich sieht es genauso aus, aber ich bin mir nicht sicher,

weil es viele Projekte gibt, die verwenden dirname(__FILE__).

user198729
quelle

Antworten:

189

Ihr Ergebnis ist genau das gleiche ; Also kein Unterschied.


Zum Beispiel die beiden folgenden Zeilen:

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

Geben beide die gleiche Ausgabe:

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


Es gibt jedoch mindestens zwei Unterschiede:

  • __DIR__existiert nur mit PHP> = 5.3
    • weshalb dirname(__FILE__)wird häufiger verwendet
  • __DIR__wird zur Kompilierungszeit ausgewertet, dirname(__FILE__)bedeutet einen Funktionsaufruf und wird zur Ausführungszeit ausgewertet
    • so, __DIR__ist (oder sollte) schneller.


Als Referenz siehe den Abschnitt " Magische Konstanten " des Handbuchs (zitiert) :

__DIR__: Das Verzeichnis der Datei.
Bei Verwendung in einem Include wird das Verzeichnis der enthaltenen Datei zurückgegeben.
Dies entspricht dirname(__FILE__).
Dieser Verzeichnisname hat keinen abschließenden Schrägstrich, es sei denn, es handelt sich um das Stammverzeichnis.
(Hinzugefügt in PHP 5.3.0.)

Pascal MARTIN
quelle
3
Ich bin
Pascal MARTIN
3
DIR und dirname ( FILE ) entfernen immer den letzten Schrägstrich, richtig?
Nkkollaw
3
Richtig, außer wenn der gesamte Pfad "/" ist. In diesem Fall wird das nicht entfernt.
Francisco Presencia
1
Ich bin mir nicht sicher, ob ich richtig verstanden habe: dirname ( _FILE_ ) ist der schnellste, oder?
Giacomo Tecya Pigani
7
@ GiacomoTecyaPigani nein, __DIR__ist schneller.
Nico