2013-08-07 3 views
5

Est-il possible d'obtenir l'emplacement du fichier PHP, évalué lors de l'exécution? Je cherche quelque chose de similaire à la constante magique __DIR__, mais évalué à l'exécution, comme une liaison tardive. différence similaire avec self et static:PHP __DIR__ a évalué l'exécution (liaison tardive)?

__DIR__ ~ self 
    ??? ~ static 

Mon objectif est de définir une méthode dans une classe abstraite, en utilisant __DIR__ qui serait évaluée respectivement pour chaque classe d'héritier. Exemple:

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

De toute évidence, ce problème ne se produit que si Parent et Heir sont dans des répertoires différents. S'il vous plaît, prenez cela en compte. En outre, la définition getDir maintes et maintes fois dans différentes classes d'Héritier ne semble pas être et de l'option, c'est la raison pour laquelle nous avons l'héritage ...

Répondre

6

Vous pouvez ajouter le code suivant dans la méthode GETDIR de classe Parent

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

Votre classe parente ressemblera à ceci

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

en espérant qu'il vous aidera.

+0

C'est cool ... Rien d'autre, les gens? La conception du nettoyeur est la meilleure. –

+1

Vous pouvez également utiliser ReflectionObject: 'return dirname (nouveau \ ReflectionObject ($ this)) -> getFileName())' –