扩展PHP类

时间:2012-08-02 14:03:31

标签: php late-static-binding

我为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()在课堂学生中执行时执行。这是通过后期静态绑定可能实现的吗?

2 个答案:

答案 0 :(得分:3)

你会发现两件有用的事情:

  • get_called_class()代替get_class()
  • static::foo()代替self::foo()

答案 1 :(得分:0)

您可以使用get_class(parent)或使用表名创建私有字段,并仅在需要时将其重载:

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

class B extends A {
    public function getTable() {
        return $this->table; //will return 'A'
    }
}