__DIR__ VS bruke Refleksjon

stemmer
3

I Symfony2, så jeg koden som nedenfor:

    if (null === $this->rootDir) {
        $r = new \ReflectionObject($this);
        $this->rootDir = dirname($r->getFileName());
    }

hvorfor ikke bare bruke __DIR__?

    if (null === $this->rootDir) {
        $this->rootDir = __DIR__;
    }

Hva er forskjellen mellom dem?

Publisert på 08/06/2011 klokken 07:21
kilden bruker
På andre språk...                            


4 svar

stemmer
5

__DIR__returnerer katalogen til en fil der det heter. Den Symphony2 kode returnerer katalogen der klassen er definert, noe som mest sannsynlig er en annen fil.

Svarte 08/06/2011 kl. 07:29
kilden bruker

stemmer
2

Som PHP manualen står det:

  • DIR returnerer katalogen til en fil. Hvis brukt inne i en omfatter katalogen av den inkluderte filen returneres
  • FIL returnerer fullstendige banen og filnavnet til filen. Hvis brukt inne i en omfatte, er navnet på den inkluderte filen returnert.

Så disse konstantene returnerer alltid stier i filen der det er brukt. Men jeg antar at det ikke er forventet atferd i kodebiten du sitert. Muligens koden befinner seg i noen base klasse, mens det kan startes fra forløpende klasser. Hvis vi ønsker å få banen til den aktuelle klassen, er den første måten det riktige.

Svarte 25/10/2012 kl. 09:49
kilden bruker

stemmer
0

Jeg tror det er fordi __DIR__vil returnere katalog av skript som opprinnelig ble startet. I koden eksempel, ville du få katalogen av objektets klasse. Jeg kan være galt selv har ikke prøvd dette ennå Rett meg noen hvis jeg er.

Svarte 08/06/2011 kl. 07:24
kilden bruker

stemmer
0

__DIR__eksisterer bare i PHP 5.3. Før 5.3, måtte vi bruke dirname(__FILE__)eller noe lignende.

Svarte 08/06/2011 kl. 07:23
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more