我有几个模型具有这种结构:
class Test extends yiidbActiveRecord
{
public static string $defaultDateRange = 'month'; // This property is the same in all classes
public static array $fields = ['name', 'price']; // This property is unique for each class
// This function is the same in all classes
public static function batchUpdate(array $preparedData): int
{
// A class variable is used here - self::$fields
}
// This function is different in all classes
public static function prepareData(array $data): array
{
// ...
}
}
模型既有共同的属性和函数,也有自己独特的属性和函数。我想优化代码以删除重复的代码段,但我不知道如何做到这一点。
我尝试创建一个基类并定义其中所有重复的属性和方法。但是我无法获得子元素的属性值Test::$fields无论如何。
class BaseMarketplaceMetric extends yiidbActiveRecord
{
public static string $defaultDateRange = 'month';
public static function batchUpdate(array $preparedData): int
{
// Need access to a property of a child class - Test::$fields
}
}
class Test extends BaseMarketplaceMetric
{
public static array $fields = ['name', 'price'];
public static function prepareData(array $data): array
{
// ...
}
}
如何获得父类中子类的静态属性的值?或者这一切都需要以完全不同的方式来完成?
解决方案:
我只是在父类中使用static::$fields
来获取子类的静态属性。