LoginSignup
7
9

More than 5 years have passed since last update.

PHPで、子クラスから親クラスのメソッドを実行した時に、その子クラスのファイル名が知りたい

Posted at

ちょっと面倒なタイトルだけど、やりたいこととしては

  • 親クラスに何らかのメソッドがあって、子クラスでもそれを使う(継承)
  • メソッド自体は親クラスにしか書かない
  • でも呼ばれた子クラスのファイル名(とかその他)が知りたい

ということがあって、普通に debug_backtrace() とか使ったんだけど、返ってくるのは親クラスのファイル名だった。

例えば以下の場合、実行してるのは子クラス( child.php )だけど、返るのは親クラスのファイル名( parent.php )。
実行してるのが parant.php だからそうなるみたい。

parent.php(失敗例)
class ParentClass
{
    public function trace()
    {
        $trace = debug_backtrace();
        // ↓呼び出してるのはこのファイル(parent.php)なので、それが返る
        return basename($trace[0]['file']);
    }
}

include('child.php');

$child = new ChildClass();
echo $child->trace(); // parent.php
child.php(失敗例)
class ChildClass extends ParentClass
{
}

ReflectionClass を使うとうまくいった。

parent.php(成功例)
class ParentClass
{
    public function trace()
    {
        $trace = debug_backtrace();
        // ↓これで呼び出し元のクラスの情報を取得
        $ref = new ReflectionClass($trace[0]['object']);
        return basename($ref->getFilename());
    }
}

include('child.php');

$child = new ChildClass();
echo $child->trace(); // child.php
child.php(成功例)
class ChildClass extends ParentClass
{
}

子のファイルごとにエラーとかをまとめたいけど親クラス内だけで処理したかった、みたいなやつで使ったので備忘のためw

7
9
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
9