2013-08-07 11 views
5

È in qualche modo possibile ottenere la posizione del file PHP, valutata in fase di esecuzione? Sto cercando qualcosa di simile alla costante magica __DIR__, ma valutato in fase di runtime, come un binding tardivo. differenza Simile con self e static:PHP __DIR__ ha valutato il runtime (binding in ritardo)?

__DIR__ ~ self 
    ??? ~ static 

Il mio obiettivo è la definizione di un metodo di una classe astratta, utilizzando __DIR__ che sarebbe valutata rispettivamente per ogni classe erede. Esempio:

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

Ovviamente, questo problema si verifica solo se Parent e Heir sono in diverse directory. Per favore, prendi questo in considerazione. Inoltre, definendo getDir più e più volte in varie classi Heir non sembra essere e l'opzione, è per questo che abbiamo eredità ...

risposta

6

È possibile aggiungere il seguente codice nel metodo GETDIR della classe padre

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

la classe genitore sarà simile a questa

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

nella speranza che possa aiutare.

+0

Questo è bello ... Qualcos'altro, gente? Il design più pulito, meglio è. –

+1

Puoi anche usare ReflectionObject: 'return dirname (new \ ReflectionObject ($ this)) -> getFileName());' –

Problemi correlati