我有一个PHP类,其实例是数据库表中的行。该类具有允许创建,读取,更新和删除与该类的给定实例相对应的行的方法。就目前而言,它运作良好,但是我目前在代码中明确命名了每个数据库列。结果,当我添加或删除列时(偶尔但并非罕见的操作),我必须更新该类以包括那些列名。我想对我的代码进行抽象处理,以便它首先查询数据库以确定需要填充的列。(顺便说一下,我正在使用PHP 7.2)
下面的代码是我现在所拥有的,但是我对如何抽象它感到茫然,这样它就不会与拼写每个特定的列名相关联。
<?php
class Example extends DatabaseObject {
static protected $table_name = "data";
static protected $db_columns = ['id','column1', 'column2', 'column3', 'column4'];
public $id;
public $column1;
public $column2;
public $column3;
public $column4;
public function __construct($args=[]) {
$this->column1 = $args['column1'] ?? '';
$this->column2 = $args['column2'] ?? '';
$this->column3 = $args['column3'] ?? '';
$this->column4 = $args['column4'] ?? '';
}
public function attributes() {
$attributes = [];
foreach (static::$db_columns as $column) {
if ($column === "id") { continue; }
$attributes[$column] = $this->$column;
}
return $attributes;
}
public function save() {
// calls private methods to validate, sanitize, then create or update, acc. to context
// to create, it preps an sql statement based on a call to attributes()
}
}
?>
答案 0 :(得分:1)
我不确定您想走多远。这是一种可以抽象一行数据的方法。
您会注意到我使用[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = smtp
; http://php.net/smtp-port
smtp_port = 587
; For Win32 only.
; http://php.net/sendmail-from
sendmail_from = exchange_shop@uniwa.gr
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
sendmail_path = /usr/sbin/sendmail -t -i
和set
函数来访问数据。
get
答案 1 :(得分:0)
您可能需要查看魔术方法byte[] store = (data, 0, bytes);
和__get()
。基本上,它们是类方法,在尝试访问类中不存在的属性时会触发它们,因此您可以使用它们的后备。
请查看文档:{{3}}