Probuje ogarnac jak dziala active record juz od 2 dni, potrzebuje tego zeby napisac moja pierwsza porzadna aplikacje obiektowa.
Natknalem sie na jakies marne materialy w internecie na ten temat, grzebalem na forum i ciagle malo rozumiem, wiem ze chodzi tutaj o mapowanie tabeli na obiekty ale z implementacja mam juz problem, jesli ktos moglby mi wytlumaczyc kilka rzeczy bede wdzieczny.
Oto co do tej pory napisalem z pomoca kolegow a zaraz zadam pytania

<?php class Database { function query($sql) { } } private $connection; class MysqlDatabase extends Database { public function __construct($host, $user, $pass, $dbname) { } public function query($sql) { $result[] = $r; } return $result; } } ?>
Powyzej mamy klase opakowujaca polaczenie z baza danych, no i tutaj raczej nie ma jakis niespodzianek, wszystko jasne
Teraz kolejna klasa :
class ActiveRecord { public $db; public $tableName; function insert() { } function update() { } function delete() { } } } class Klient extends ActiveRecord { } ActiveRecord::$db = new MysqlDatabase("localhost", ....); $klient = Klient::find(5); $klient->ulubiony = true; $klient->update();
No i tutaj zaczynaja sie schody, po pierwsze co oznacza ten zapis ?
ActiveRecord::$db = new MysqlDatabase("localhost", ....);
Głownie chodzi mi o odwolanie sie za pomoca dwukropka, czy $db jest zmienna statyczna ze w taki sposob jest tutaj odwolanie ?
Nastepnie kolejny rzecz, po dyskusjach z kolega powiedzial mi ze jednak lepiej byloby klase Active Record rozbic na dwie klasy aby zrezygnowac z funkcji statycznej find() , wyglada to wtedy tak :
class Table { public $tableName; public $db; function find($id) { } } class Row { function insert() { } function update() { } function delete() { } } class KlientTable extends Table { function findTychKtórzyNiePlaca() { $this->db->query("SELECT * FROM ......" return new KlientRow(....); } } class KlientRow extends Row { function zanotujZebyWyslacUpomnienie() { } } $klienci = new KlientTable(); $klient = $klienci->findTychKtórzyNiePlaca(); $klient->zanotujZebyWyslacUpomnienie();
W tym przypadku nie rozumiem dlaczego jest to rozbite na dwie klasy, tzn wiem dlaczego ale nie znam mechanizmu rzadzacego tym procesem, no i sprawia mi klopot zrozumiene tej linijki :
$this->db->query("SELECT * FROM ......
nie wiem poprostu czy db jest metoda czy zmienna no i jak to powinno dzialac ......
Licze ze znajdzie sie dobra dusza ktora przyblizy mnie od zbudowania mojej aplikacji
