私はPHPに比較的慣れていないので、データベースアクセスコードを実装するための最良の方法を考えています。いくつかの単純なデータベースアクセスオブジェクトを作成しようとしています。各テーブルは独自のクラスを取得し、クラスの各インスタンスはテーブル内の行を表します。ドリルをご存知でしょう。
私は機能しているように見えるコードを持っていますが、オンラインで見たもののいくつかは、私のアプローチがどういうわけか間違っているのではないかと心配しています。そして「これはできますか?」と「私はこれをすべきですか?」2つの異なる質問ですが、PHPの獣医がチャイムを鳴らすことができると期待していました。
私の現在の戦略は、すべての共通コードを含む基本レベルの抽象テーブルクラスを作成し、個々のテーブルを表す各クラスにそれを拡張させることです。
私の主な関心事はこのコードです:
abstract class Table {
protected abstract static function get_fields();
protected abstract static function get_primary_key();
protected abstract static function get_table_name();
アイデアは、各実装クラスがフィールド名、主キー、テーブル名などを定義し、次にTableクラスがそれらの関数を使用して特定の空白を埋めるというものです。
static function insert($values) {
$field_list = array();
$value_list = array();
foreach (static::get_fields() as $field_name) {
if (isset($values[$field_name])) {
$field_list[] = $field_name;
$value_list[] = self::escape($values[$field_name]);
}
}
$field_string = join(", ", $field_list);
$value_string = "'" . join("', '", $value_list) . "'";
$sql = "insert into " . static::get_table_name() . " ($field_string) values ($value_string)";
ご覧のとおり、重要なのは、これらの関数の前に。を付けてこれらのstatic abstract
関数にアクセスしていることですstatic::
。そして、私が知る限り、それは機能しています!
ただし、この質問に対する受け入れられた回答はabstract static
、5.3では機能がまだ許可されていないことを示しています。
だから、私はこれをどうするかを考えようとしています。答えは間違っていabstract static
ますか?関数は完全に合法的なPHPコードと見なされていますか?私は自分のコードで何かお勧めできないことをしていますか?私が考慮すべき別のアプローチはありますか?