我是 PHP 的新手,我正在寻找实现一些数据库访问代码的最佳方法。我正在尝试创建一些简单的数据库访问对象——每个表都有自己的类,类的每个实例都代表表中的一行,你知道的。
我的代码似乎可以正常工作,但是我在网上看到的一些内容让我担心我的方法可能会以某种方式出错。自从“我可以这样做吗?” “我应该这样做吗?” 是两个不同的问题,我希望一些 PHP 兽医能加入进来。
我目前的策略是创建一个包含所有公共代码的基本抽象 Table 类,然后让每个代表单个表的类扩展它。
我主要关心的是这段代码:
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 代码?我在我的代码中做了一些不可取的事情吗?我应该考虑另一种方法吗?