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