对不起我的英语。
我的问题:
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保存这些静态变量?还是另一种优雅的方式?
感谢任何帮助!
答案 0 :(得分:0)
$ fieldNames是静态的,因此它与类本身相关联,而不是与特定对象相关联。 这个例子中的类是"实体"。 设置后,它不再为空。