2013-08-07 21 views
5

Ist es irgendwie möglich, den Speicherort der PHP-Datei zu erhalten, ausgewertet zur Laufzeit? Ich suche etwas ähnlich wie die magische Konstante __DIR__, aber zur Laufzeit als späte Bindung ausgewertet. Ähnliche Differenz mit self und static:PHP __DIR__ bewertete Laufzeit (späte Bindung)?

__DIR__ ~ self 
    ??? ~ static 

Mein Ziel, ein Verfahren in einer abstrakten Klasse wird definiert, mit __DIR__, die jeweils für jeden Erben Klasse bewertet werden würden. Beispiel:

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); 
    } 
} 

Offensichtlich ist dieses Problem tritt nur auf, wenn Parent und Heir sind in verschiedenen Verzeichnissen. Bitte berücksichtigen Sie dies. Auch dann, wenn getDir immer und immer wieder in verschiedenen Heir Klassen definiert, nicht zu sein, und Option scheint, das ist, warum wir ihr Erbe ...

Antwort

6

Sie können den folgenden Code in GETDIR Methode der Eltern-Klasse hinzufügen

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

Ihre Eltern-Klasse aussehen wird dieses

abstract class Parent { 
    protected function getDir() { 
     $reflector = new ReflectionClass(get_class($this)); 
     $filename = $reflector->getFileName(); 
     return dirname($filename); 
    } 
} 

der Hoffnung, es wird helfen.

+0

Das ist cool ... Sonst noch was, Leute? Je sauberer das Design, desto besser. –

+1

Sie können ReflectionObject auch verwenden: 'return dirname (new \ ReflectionObject ($ this)) -> getFileName());' –