我有一个DatabaseObject类,其中定义了select、insert、update和delete方法。该类的目的是将MySQL数据库中的一部分行表示为PHP对象。构造函数调用MySQL的SELECT命令,析构函数调用DELETE命令(除非我要求不这样做)。
以下是我的DatabaseObject类:
class DatabaseObject {
protected $table;
protected $index_field;
private $data;
function __construct($id) {
//MySQL SELECT and assign resource to data
}
function __destruct() {
//MySQL UPDATE
}
public function insert($data) {
global $db; //Database Class for using MySQL
$fields = array();
$values = array();
foreach ($data as $field => $value) {
$fields[] = "`".$field."`";
$values[] = "'".$db->escape($value)."'";
}
$sql = "INSERT INTO ".$this->table." (".join(', ', $fields).") VALUES (".join(', ', $values).")";
if($db->query($sql)) {
return $db->insertID();
} else {
return false;
}
}
//More methods; update(), delete(), select()
}
当我想访问特定的表时,我会扩展DatabaseObject类。例如,我的User类是为了访问用户表。下面是代码:
class User extends Object {
public static $anonymous_data = array('user_id' => 0, 'user_level' => ANONYMOUS, 'username' => 'Anonymous');
function __construct($user_id = NULL) {
global $db;
$this->db = $db;
$this->table = USER_TABLE;
$this->index_field = 'user_id';
parent::__construct($user_id);
}
function __destruct() {
parent::__destruct();
}
//Other user methods; login(), logout() etc.
}
现在,我希望能够在不实例化用户类的情况下调用插入方法。我相信,我需要将其设为静态以实现此目的。但如何使插入方法成为静态,同时又允许它使用在扩展类中定义的表呢?
换句话说,我想做到这一点:
User::insert($data); //INSERT into user table
AnotherClass::insert($data); //INSERT into another table
...在不实例化任何一个类的情况下。
insertStatically
或其他名称,否则无法实现。 - Explosion Pillsglobal $db;
=== 不好。同时,或许你应该使用static
关键字来定义一个静态函数? - Sammitch