Parent的类静态变量为子类的不同值

时间:2017-01-10 14:02:46

标签: php class static

对不起我的英语。

我的问题:

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'] :(

如果我在User和Car类中声明$ fieldNames工作正常,但在实际项目中我有几十个静态变量,如$ fieldNames和数百个实体

是否有可能获得最佳解决方案?

也许创建一个小型存储库类,它将按实体的id保存这些静态变量?还是另一种优雅的方式?

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

$ fieldNames是静态的,因此它与类本身相关联,而不是与特定对象相关联。 这个例子中的类是"实体"。 设置后,它不再为空。