2011-12-03 14 views
8

2つのファイルがあり、それぞれにクラスがあるとします。親クラス内の子クラスがあるファイル名を取得するにはどうすればよいですか?拡張クラスのファイル名を取得

ファイル2(子クラス):

class B extends A{ 

} 

ファイル1:それはありますどのような目的

class A{ 

    final protected function __construct(){ 
    // here I want to get the filename where class B is, 
    // or whatever class is the child 
    } 

} 
+2

保護されたコンストラクタでクラスをどのようにインスタンス化しますか? – Phil

+0

親クラスを作成したいときに、任意の子クラスの位置を魔法のように知ることができますか?それは容易に可能ではなく、実際には何の目的も持っていません。あなたは正確に何をしようとしていますか?実際の最終目標を達成するためのより良い方法が考えられます。 –

答えて

15

本当にわからないが、ここであなたが行く:

class A{ 

    final protected function __construct(){ 
    $obj = new ReflectionClass($this); 
    $filename = $obj->getFileName(); 
    } 

} 
+0

[ReflectionObject](http://php.net/manual/en/class.reflectionobject.php)は正しい選択でしょうか? – Phil

+0

コンストラクタのアクセシビリティを 'public'に変更する必要があります。 – webbiedave

+2

@webbiedave OPがその保護されたコンストラクタを持つオブジェクトをどのように作成しているのかは分かりませんが、理由があるかもしれません。おそらく、彼らは 'A 'に公に静的なファクトリメソッドを持っているのでしょうか? – Phil

3

することができますカンニングと使用debug_backtrace

class A { 
    final protected function __construct() { 
    $stacktrace = @debug_backtrace(false); 
    $filename = $stacktrace[0]['file']; 
    } 
} 
関連する問題