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 ответ
То, что вы хотите сделать, кажется мне странным, но вот одно из возможных решений вашей проблемы с использованием отражения и позднего статического связывания.
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/");
}
}
Каждый дочерний класс будет автоматически иметь путь к изображению в зависимости от того, где был определен дочерний класс.