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

これに関連して役立つ2つのことがあります。

  • 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 に答える