2

画像パスの共通変数を保持し、クラスコンストラクターを介して設定される親クラスがあります

abstract class Parent_Class {
     protected $image_path;

     public function __construct($image_path_base) {
         $this->image_path = $image_path_base . '/images/';         
    }
}

基本パスは、子クラスまたはそれらのファイルの場所によって異なります。

class ChildA_Class {
    public function __construct() {
         parent::__construct(dirname(__FILE__));         
         ...
    }
}

class ChildB_Class {
    public function __construct() {
        parent::__construct(dirname(__FILE__));
        ...         
    }
}

子クラスのを削除しdirname(__FILE__)、ロジックを親クラスに移動する方法はありますか?

4

1 に答える 1

1

あなたがしたいことは私には奇妙に思えますが、リフレクションと遅延静的バインディングを使用した問題の解決策の 1 つを次に示します。

abstract class ParentClass
{
    protected $imagePath;

    public function __construct()
    {
        // get reflection for the current class
        $reflection = new ReflectionClass(get_called_class());

        // get the filename where the class was defined
        $definitionPath = $reflection->getFileName();

        // set the class image path
        $this->imagePath = realpath(dirname($definitionPath) . "/images/");
    }
}

すべての子クラスは、子クラスが定義された場所に基づいて自動的にイメージ パスを持ちます。

于 2013-04-22T18:47:38.797 に答える