我有一个父类,它包含一个图像路径的公共变量,并通过类构造函数设置
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__)
并将逻辑移向父类?
答案 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/");
}
}
每个子类都会根据子类的定义位置自动生成图像路径。