Как обратится к свойству потомка из родителя? Добрый день всем.
Есть небольшая абстракция над БД в виде:
Основной класс Table, в нем есть свойство tableName которое ичпользуется во всех методах для построения sql запроса
Методы определяют стандартные действия с таблицами
Дочерние классы - являются классами под каждую конкретную таблицу, где свойство tableName равно названию конкретной таблицы.
Для того чтобы корректно отработали стандартные методы мне приходится в дочернем классе их переопределеть примерное так:public static $tableName = 'drivers_models';
public static function getItemsById($array)
{
parent::$tableName = self::$tableName;
$data = parent::getItemsById($array);

// ...
return $data;
}
Как мне избежать подобного копирования кода?
Возможно ли обратится к свойству потомка который вызвал метод?

21 Авг 2019 в 07:04
200 +1
0
Ответы
1

Для того, чтобы избежать копирования кода в дочерних классах, можно воспользоваться концепцией наследования и использовать функцию get_called_class() для получения имени дочернего класса, который вызвал метод. В этом случае, можно обратиться к свойству потомка таким образом:

class Table {
public static function getItemsById($array)
{
$tableName = static::$tableName;
// использовать $tableName для построения запроса и выполнения необходимых действий
return $data;
}
}
class DriversModels extends Table {
public static $tableName = 'drivers_models';
}
// Вызов метода из дочернего класса
$data = DriversModels::getItemsById($array);

В данном случае, мы используем static::$tableName вместо parent::$tableName для обращения к свойству потомка, который вызвал метод. Таким образом, вам не потребуется переопределять свойство tableName в каждом дочернем классе.

20 Апр 2024 в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир