0
请为我的英语感到抱歉。父类的静态变量儿童类的不同值
我的问题:
abstract class Entity
{
protected static $fieldNames;
public static function getFieldsNames()
{
if (is_null(static::$fieldNames)) {
foreach (static::$fieldsMap as $name => $map) {
static::$fieldNames[] = $name;
}
}
return static::$fieldNames;
}
}
class User extends Entity
{
protected static $fieldsMap = [
'id' => [
// ...
],
'name' => [
// ...
],
'phone' => [
// ...
]
];
}
class Car extends Entity
{
protected static $fieldsMap = [
'id' => [
// ...
],
'brand' => [
// ...
],
'color' => [
// ...
]
];
}
print_r(User::getFieldsNames());
// ['id', 'name', 'phone'] - On first call it works as expected, but...
print_r(Car::getFieldsNames());
// ['id', 'name', 'phone'] :(
如果我宣布$用户和汽车类的字段名工作得很好,但在实际项目中,我有几十实体
它是静态变量,例如$字段名和数百个可能的最佳解决方案?
也许创建一个小的存储库类,将保持这些静态变量的实体的ID?或另一种优雅的方式?
感谢任何帮助!
可能是因为'$ fieldNames'是静态的;并且你正在检查它是否已经填充if(is_null(static :: $ fieldNames)){'所以它不会重新填充一个不同的子类......为什么不简单地'返回static :: $ fieldsMap;'? –
如果你想在继承中使用静态方法/变量,那么确保你使用PHP7,因为旧版本有很多限制。 –
@Mark Baker 在实际的项目中会有数十个带有计算/处理值的静态变量,而且我希望为每个实体设置一次这些值,同时在运行时脚本中获得更好的性能,因此,我不能只使用'return static :: $ var' – Eonian