Entschuldigung für mein Englisch.Klassenvariable der Elternklasse für Kinderklassen anderer Wert
Mein Problem:
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'] :(
Wenn ich $ Feldnamen in User und Auto-Klassen funktionieren, aber in realen Projekt erkläre ich zig statischen Variablen wie $ Feldnamen und Hunderte von Entität
Ist es hat möglich zur besten Lösung?
Vielleicht kleine Repository-Klasse erstellen, die diese statischen Variablen nach Entity-ID behalten? oder ein anderer eleganter Weg?
Danke jede Hilfe!
Wahrscheinlich, weil '$ fieldNames' statisch ist; und du überprüfst, ob es bereits befüllt ist 'if (is_null (static :: $ fieldNames)) {' so wird es nicht für eine andere Kindklasse neu gefüllt ... warum nicht einfach 'static :: $ fieldsMap;'? –
Wenn Sie statische Methoden/Variablen in der Vererbung verwenden möchten, stellen Sie sicher, dass Sie PHP7 verwenden, da ältere Versionen viele Einschränkungen aufwiesen. –
@Mark Baker In realen Projekt wird Zehnen statische Variablen mit berechneten/behandelten Werte, und ich möchte nur einmal diese Werte für jede Entität während Laufzeit Skript für eine bessere Leistung, aus diesem Grund kann ich nicht nur 'statische Rückkehr zurückgeben :: $ var ' – Eonian