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