0

最近,我开始更认真地研究 PHP 中的类和 OOP。我正在尝试创建一个简单的网站,同时尽可能多地利用课程,但有些问题一直萦绕在我的脑海中。

更具体地说,我想知道“正确”的站点结构如何使用处理用户、页面、菜单等的类和方法。目前我正在使用这个包装器来更有效地绕过 MySQLi,我可以' t 似乎决定我应该如何用其他对象实现这个包装器 - 我是否为用户、菜单等单独创建一个新类,并且每次创建实例时只通过该类传递数据库变量?

$db = new Mysqlidb (DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
$user = new User ($db);

还是我只是将 SQL 类扩展为“模型”,就像包装器的作者在这里指出的那样。

同样一般来说,什么应该保留一个类,我应该只用函数处理什么?我应该如何处理我的 MySQL 类的事情?

将每个菜单项/用户/页面作为对象处理是一种好习惯吗?

这些只是现在让我感到困惑的一些事情。网上有很多关于 OOP 的例子,但我仍然没有找到一个像样的例子来解释我上面提出的问题。

4

1 回答 1

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,我会避免在数据库中存储大部分静态内容。只需将菜单/侧边栏/标题/等拆分为单独的子视图,就可以了。

于 2015-08-02T09:32:41.060 回答