C'è qualche differenza tra __DIR__ e dirname (__ FILE__) in PHP?


122

Sembra lo stesso per me, ma non sono sicuro

perché ci sono molti progetti che utilizza dirname(__FILE__).

Risposte:


189

Il loro risultato è esattamente lo stesso ; quindi, nessuna differenza su questo.


Ad esempio, le due righe seguenti:

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

Entrambi daranno lo stesso output:

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


Ma ci sono almeno due differenze:

  • __DIR__esiste solo con PHP> = 5.3
    • motivo per cui dirname(__FILE__)è più ampiamente utilizzato
  • __DIR__ viene valutato in fase di compilazione, mentre dirname(__FILE__) indica una chiamata di funzione e viene valutato in fase di esecuzione
    • quindi __DIR__è (o dovrebbe essere) più veloce.


Come riferimento, vedere la sezione delle costanti magiche del manuale (citando) :

__DIR__: La directory del file.
Se utilizzato all'interno di un include, viene restituita la directory del file incluso.
Questo è equivalente a dirname(__FILE__).
Questo nome di directory non ha una barra finale a meno che non sia la directory principale.
(Aggiunto in PHP 5.3.0.)


3
Non sono sicuro, ma è lì da un po 'di tempo (la pagina delle costanti di Magic del manuale dice che il suo comportamento è stato modificato in PHP 4.0.2; quindi direi che è già stato lì prima)
Pascal MARTIN

3
DIR e dirname ( FILE ) rimuovono sempre l'ultima barra, giusto?
nkkollaw

3
Corretto, tranne quando l'intero percorso è "/", nel qual caso non lo eliminano.
Francisco Presencia

1
Non sono sicuro di aver capito bene: dirname ( _FILE_ ) è il più veloce, giusto?
Giacomo Tecya Pigani

7
@GiacomoTecyaPigani no, __DIR__è più veloce.
Nico
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.