Pre svega hvala za review, pokusacu da opravdam neke odluke:
Query builder nije ovde da bi se ubrzalo pisanje koda tako sto npr necu morati da kucam join("INNER JOIN table ON table.user_id = users.user_id") vec samo join("table", "table.user_id = users.user_id"), kao sto je kod CI ActiveRecord klase. Ideja je da query string prebacim u objekat, tako da taj jedan query mogu graditi iz vise metoda, evo ukratko primera nekog modela:
PHP kôd:
<?php
class PostModel
{
/**
* @var DBQuery
*/
private $query;
function __construct() {
$this->query = DB::getInstance()->createQuery();
$this->query->select("p,*")
->from("posts p")
->join("INNER JOIN users u ON u.user_id = p.user_id");
}
function getPosts($args = array()) {
$args = array_merge(array(
"posts_per_page" => 10,
"is_active" => 1
), $args
);
$this->query->limit($args["posts_per_page"]);
$this->query->where("p.is_active = ?", $args["is_active"]);
return $this->query->execute()->fetchCollection();
}
function getPostsByUserId($user_id, $args = array()) {
$this->query->where("p.user_id = ?", $user_id);
return $this->getPosts($args);
}
}
Nadam se da je sada jasnije i da mozes da shvatis smisao tako neke klase.
Da, DB je samo implementacija singleton paterna kako ne bi uvek prosledjivao db objekat. Singleton u ovakvim slucajevima i ima najvise smisla i tu ga je najpozeljnije i koristiti.
Sto se include/require, nisam hteo da koristim autoloadere da ne bih bezveze komplikovao kod, zelim da bude sto jednostavnije a i kompatibilno sa 5.2 verzijom.
UTF8 je default vrednost, ali se moze prepisati tako se DBWrapperu prosledi u poslednjem $options parametru druga vrednost za PDO::MYSQL_ATTR_INIT_COMMAND. Ali da, probacu da nadjem elegantnije resenje za ovo.