Jag tycker din kod ser bra ut. Du kan ta bort db_handler::disconnect(); för det görs automatiskt. Det finns en standard på hur man ska skriva kommentarer som heter phpdoc. Du kan se den här:
http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_tags.pkg.html
Kanske kan du lägga in all denna kod i samma metod
$db = db_handler::get_instance();
$stmt = $db->prepare...
$stmt->execute...
$result = $stmt...
return $result
Det vore snyggare att bara skriva:
return Db::fetchAll($sql, $arguments);
Skaffa en editor i php som hjälper dig med OO. Den bästa jag vet är zend Studio som du kan ladda ner här:
http://www.zend.com/en/products/studio/downloads
Abstract, static, interface, polymorphism, inkapsling mm är olika metodiker inom OO som du kommer stöta på sen när du suttit med det ett tag. Det är svårt att förklara exakt när och varför man ska använda allihop men lite kortfattat så kan man säga såhär:
Static
Det finns två olika typer av metoder på en klass: static och instans -metoder. För att komma åt instansmetoderna måste du först skapa ett objekt (en instans) av den klassen innan du kan använda dem. På static så skapas inget objekt utan det går att komma åt dem genom att skriva <klass>::<metod>
//det här är en instansmetod
$db = new Db();
$connection = $db->connect();
//det här är en statisk metod (ingen instans skapas)
$connection = Db::connect();
Man använder oftast statiska metoder som olika generiska "util-metoder" tex mattematiska formler och liknande. Math::abs($num); Math::pow($num);...
Se det som ett sätt att gruppera funktioner med liknande uppgift på ett och samma ställe. I ditt projekt kan du tex lägga in alla metoder som modifierar arrayer på något sätt som statiska metoder i en klass och kalla den ArrayUtil eller liknande. Sen kan du komma åt dem med ArrayUtil::sort($array), ArrayUtil::reverse($array);
Eftersom inget objekt skapas går det inte att använda $this i en statisk metod. Istället använder man self:: för att komma åt andra statiska metoder i den klassen. En statisk metod kan inte komma åt instansmetoder i samma klass (instansmetoder kräver ett objekt).
Abstrakt
En abtrakt klass fungerar som en slags mall eller ett kontrakt. Du kan definera metoder i den men du överlåter implementationen av metoderna till alla klasser som ska ärva från den.
abstract class Animal{
abstract function speak(); //det här är en abstrakt metod, den är bara definerad men saknas implementation
function eat(){
echo "eating"; //en abstrakt klass kan innehålla vanliga metoder också. De ärvs som vanligt.
}
}
class Dog extends Animal{
//här kommer php gnälla för att du inte har implementerar speak();
}
class Cat extends Animal{
function speak(){
echo 'mjaau'; //här har vi implementerar speak korrekt
}
}
Abstrakta metoder garanterar att alla klasser som ärver från den abstrakta klassen har implementerat metoden. Detta är ett krav för att Polymorphism ska fungera.
Att göra min db klass abtrakt var lite overkill det hade fungerat lite bra utan. Grejen med singletonmönstret är att det bara får finnas EN instans av klassen db. Enda sättet att få den referensen är att anropa den statiska metoder Db::getInstance(); Användaren kan inte skapa en egen instans ($db = new Db(); funkar inte) för konstruktorn är privat. Dessutom är klassen abstrakt för att förtydliga. Det går nämligen inte att skapa instanser utav abstrakta klasser.
Hade jag tillåtit användaren att skapa egna instanser av db klassen hade antagligen koden i metoden connect() körts flera gånger vilket är ett slöseri eftersom den bla innehåller lite config och en sql fråga som bara ska köras en gång.
-----
Ja min klass retunerar ett PDO objekt vilket är samma som din gör. Flödet blir ungefär såhär:
$db = Db::getInstance();
$stmt = $db->prepare('
SELECT user_id, username, password, email
FROM user
WHERE username = ? AND password = ?
');
$stmt->execute($arguments);
return $stmt->fetchAll();
-----
Jag vet ingen bra svensk resurs på designmönster. Du borde ändå börja med att förstå mer om OO innan du börjar med det. Ett "mönster" är inget magiskt utan bara bra/fungerande generella lösningar som andra gjort inom OO och som du kan applicera i din egen kod. Här är en bra bok:
http://www.adlibris.com/se/product.aspx?isbn=0596007124