1

我的 PHP 项目中的每个 MySQL 表都有一个单独的类。该类将是这样的:

class students  {

  public static function find_all() {
        return self::sql_finder("SELECT * FROM ".get_class());
  }

}

我对项目中几乎所有的表都使用相同的类,除了我将类名更改为表名。现在您可以看到我在类中使用的函数中使用了“get_class()”,因此 SQL 从类名中获取表名。

由于我在所有类中使用的类中有太多函数,因此我计划使用子类扩展该类,如下所示:

class  class_with_all_the_common_functions {
 public static function find_all() {
        return self::sql_finder("SELECT * FROM ".get_class());
  }
}

class student extends class_with_all_the_common_functions {
 // some table specific functions
}

现在当我使用student::find_all()它时显示错误:

Database query failed: Table 'dr.class_with_all_the_common_functions
doesn't exist

我认为这很清楚,我希望find_all()在班级学生中执行它。这是否可以通过后期静态绑定实现?

4

2 回答 2

3

您会发现与此相关的两件事会有所帮助:

  • get_called_class()代替get_class()
  • static::foo()代替self::foo()
于 2012-08-02T14:07:36.540 回答
0

您可以使用get_class(parent)或制作带有表名的私有字段,并仅在必要时重载它:

class A {
    private $table = 'A';
}

class B extends A {
    public function getTable() {
        return $this->table; //will return 'A'
    }
}
于 2012-08-02T14:07:09.423 回答