所以最近我开始更认真地研究PHP中的类和OOP。我正在尝试创建一个简单的网站,同时尽可能地利用课程,但是有一些问题一直困在我的脑海里。
更具体地说,我想知道如何使用处理用户,页面,菜单等的类和方法来“正确”的网站结构。目前我正在使用this wrapper来绕过MySQLi更有效,我似乎无法决定如何用其他对象实现这个包装器 - 我是否分别为用户,菜单等创建一个新类,并且每次创建实例时都只通过类传递数据库变量?
$db = new Mysqlidb (DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
$user = new User ($db);
或者我只是将SQL类扩展为“模型”,就像包装器的作者指出here一样。
同样一般来说,什么应该仍然是一个类,我应该只用函数处理什么?我应该如何处理我的MySQL类?
将每个菜单项/用户/页面作为对象处理是一个好习惯吗?
这些只是我现在困惑的一些事情。网上有很多关于OOP的例子,但我还没有找到一个合适的例子来解释我上面提到的问题。或者,如果有人知道一个好的“教科书”结构示例,也会有很多帮助。
提前致谢!
答案 0 :(得分:1)
如果你已熟悉mysqlidb,它的2.1和2.2版本将附带一个新的dbObject类来实现具有一些额外功能的模型。
查看他们的https://github.com/avbdr/PHP-MySQLi-Database-Class/blob/master/dbObject.md
如果您仍想坚持使用纯MysqliDb课程,可以尝试:
class Model {
protected $db;
public function __constuct () {
$this->db = MysqliDb::getInstance();
}
public function __call ($method, $arg) {
call_user_func_array (array ($this->db, $method), $arg);
return $this;
}
}
class user extends Model {
$this->tbl = 'users';
public function create ($data) {
$this->db->insert (...);
}
public function admins () {
return $db->where ("role", "admin")->get($this->tbl);
}
}
这将为您提供如下模型:
$user = new user ();
$q = $user->where('login','root')->admins();
看看dbObject非常简单,我打赌它会完成你需要做的工作。
对于OOP,我会避免在数据库中存储大部分静态内容。 只需将菜单/侧边栏/标题/等分成单独的子视图,您就可以了。