用PHP构建一个包含类的站点

时间:2015-07-29 13:44:40

标签: php oop mysqli

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

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

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

或者我只是将SQL类扩展为“模型”,就像包装器的作者指出here一样。

同样一般来说,什么应该仍然是一个类,我应该只用函数处理什么?我应该如何处理我的MySQL类?

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

这些只是我现在困惑的一些事情。网上有很多关于OOP的例子,但我还没有找到一个合适的例子来解释我上面提到的问题。或者,如果有人知道一个好的“教科书”结构示例,也会有很多帮助。

提前致谢!

1 个答案:

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