Хорошо, это не просто вопрос PHP, но у меня есть эта проблема в PHP, поэтому я опубликую пример на PHP.
Пример:
У меня есть три класса, скажем, data_abstract, человек и студент. Теперь у меня есть один массив данных, связанных с каждым из этих объектов.
class person extends data_abstract
{
protected $data; //name, gender, etc
}
class student extends person
{
protected $data; //student_id, etc
}
Теперь, предполагая, что каждое из этих свойств «data» происходит из таблиц базы данных, например, table_person, table_student.
После создания экземпляра мы проанализируем имя класса с помощью функции get_class () и получим данные из связанных с ними таблиц.
class data_abstract
{
public function __construct()
{
$name = get_class($this);
$table = 'table_' . $name;
$this->data = DB->query('SELECT * FROM ' . $table);
//whatever DB constant is,
//I'm just trying to get all rows of data from the related table.
}
}
Хорошо, теперь проблема, когда я создаю экземпляр студента с помощью $ student = new student (); конструктор получит данные из table_student для меня и поместит их в $ student-> data, но я не смогу получить данные из table_person и поместить эти два набора данных в один объект.
Расширяя другой класс, мы можем расширять и настраивать все методы (функции) (посредством полиморфизма), но расширение атрибутов / свойств каждого уровня объекта кажется трудным, по крайней мере, без какой-либо ручной конструкции.
Есть ли какой-либо способ на уровне абстракции для достижения этого?
(спасибо за чтение, хотел бы я прояснить вопрос.)