类继承时的dirname

时间:2013-02-14 13:25:28

标签: php inheritance dirname

我有一个父类,它包含一个图像路径的公共变量,并通过类构造函数设置

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__)并将逻辑移向父类?

1 个答案:

答案 0 :(得分: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/");
    }
}

每个子类都会根据子类的定义位置自动生成图像路径。