2013-08-07 12 views
5

実行時に評価されるPHPファイルの場所を取得することはどういうわけかできますか?私は魔法の定数である__DIR__に似たものを探していますが、実行時に遅延バインディングとして評価します。 selfstaticと同様の違い:PHP __DIR__ランタイム評価(レイトバインド)?

__DIR__ ~ self 
    ??? ~ static 

私の目標は、各相続人のクラスのそれぞれに評価されるだろう__DIR__を使用して、抽象クラスでメソッドを定義しています。例:

明らか
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); 
    } 
} 

、この問題はParentHeirが別々のディレクトリにある場合にのみ発生します。これを考慮してください。また、様々な相続人のクラスで何度も繰り返しgetDirを定義することは、我々が継承を持っている理由です、こととオプションしていないようです...

答えて

6

あなたは親クラスのGETDIR方法

$reflector = new ReflectionClass(get_class($this)); 
$filename = $reflector->getFileName(); 
return dirname($filename); 
に次のコードを追加することができます

あなたの親クラスは次のようになります

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

願っています。

+0

これはクールです...他に何か、人々?クリーナーの方が良いデザインです。 –

+1

ReflectionObjectを使用することもできます。 'return dirname(new \ ReflectionObject($ this)) - > getFileName());' –