【发布时间】:2017-04-11 12:28:43
【问题描述】:
我正在为我的一个项目开发 ORM,并且我试图通过使用匿名类来扩展基本抽象模型的默认功能,从而避免不必要地“硬编码”这些类。
现在,所有查询都基于我想在匿名类中覆盖的静态属性 $table_name。但是,当我尝试这样做时,匿名类的所有其他实例都会收到相同的值,尽管理想情况下它们会获得自己不同的值。我只会在类中使用非静态属性,但是有些静态函数使用静态属性。
我看到的选项是
- 手动创建每个类并硬编码每个模型的表名
- 重新编写代码以使用非静态属性和参数
这两种解决方案都有效,但似乎不像我希望的那样优雅。有什么建议吗?
这是一个示例代码示例
模型类
<?php
class Model{
protected static $table_name;
public static function query_table(){
[...use static::$table_name]
}
扩展匿名类
(new class() extends TableModel {
protected static $table_name = null;
public function setTableName($table_name) {
static::$table_name = $table_name;
}
});
【问题讨论】:
标签: php anonymous-class