2013-08-07 28 views
5

Czy w jakiś sposób można uzyskać lokalizację pliku PHP ocenianego w czasie wykonywania? Szukam czegoś podobnego do magicznej stałej __DIR__, ale oceniany w czasie wykonywania, jako późne wiązanie. Podobną różnicę z self i static:PHP __DIR__ oceniony czas pracy (późne wiązanie)?

__DIR__ ~ self 
    ??? ~ static 

Moim celem jest określenie sposobu, w abstrakcyjnej klasy, stosując __DIR__ które mogłyby być oceniane odpowiednio dla każdej klasy spadkobiercą. Przykład:

abstract class Parent { 
    protected function getDir() { 
    // return __DIR__; // does not work 
    return <<I need this>>; // 
    } 
} 

class Heir extends Parent { 
    public function doSomething() { 
    $heirDirectory = $this->getDir(); 
    doStuff($heirDirectory); 
    } 
} 

Oczywiście, problem ten pojawia się jedynie, gdy Parent i Heir są różne katalogi. Proszę, weź to pod uwagę. Ponadto, definiując getDir kółko w różnych klasach spadkobierca nie wydaje się być i opcja, to dlaczego mamy dziedziczenie ...

Odpowiedz

6

Możesz dodać następujący kod w metodzie getDir klasy dominującej

$reflector = new ReflectionClass(get_class($this)); 
$filename = $reflector->getFileName(); 
return dirname($filename); 

Twoja klasa rodzicielska będzie wyglądać tak, jakby to było pomocne.

+0

To jest fajne ... Coś jeszcze, ludzie? Im czystszy projekt, tym lepiej. –

+1

Możesz także użyć ReflectionObject: 'return dirname (new \ ReflectionObject ($ this)) -> getFileName());' –