Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Active record - operator ::
Wolfie
post
Post #1





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


Witam,


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 (IMG:style_emoticons/default/smile.gif)

  1. <?php
  2.  
  3. class Database {
  4.  
  5. function query($sql) {
  6. }
  7. }
  8.  
  9. private $connection;
  10.  
  11. class MysqlDatabase extends Database {
  12.  
  13. public function __construct($host, $user, $pass, $dbname) {
  14. $this->connection = mysql_connect($host, $user, $pass);
  15. mysql_select_db($dbname, $this->connection);
  16. }
  17.  
  18. public function query($sql) {
  19. $resultSet = mysql_query($sql, $this->connection);
  20. $result = array();
  21. while($r = mysql_fetch_assoc($resultSet)) {
  22. $result[] = $r;
  23. }
  24. return $result;
  25. }
  26. }
  27. ?>


Powyzej mamy klase opakowujaca polaczenie z baza danych, no i tutaj raczej nie ma jakis niespodzianek, wszystko jasne

Teraz kolejna klasa :

  1. class ActiveRecord {
  2. public $db;
  3. public $tableName;
  4. function insert() {
  5. }
  6. function update() {
  7. }
  8. function delete() {
  9. }
  10. static function find($id) {
  11. }
  12. }
  13.  
  14. class Klient extends ActiveRecord {
  15.  
  16. }
  17.  
  18. ActiveRecord::$db = new MysqlDatabase("localhost", ....);
  19.  
  20. $klient = Klient::find(5);
  21. $klient->ulubiony = true;
  22. $klient->update();


No i tutaj zaczynaja sie schody, po pierwsze co oznacza ten zapis ?

  1. 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 :

  1. class Table {
  2. public $tableName;
  3. public $db;
  4. function find($id) {
  5. }
  6. }
  7. class Row {
  8. function insert() {
  9. }
  10. function update() {
  11. }
  12. function delete() {
  13. }
  14. }
  15.  
  16. class KlientTable extends Table {
  17. function findTychKtórzyNiePlaca() {
  18. $this->db->query("SELECT * FROM ......"
  19. return new KlientRow(....);
  20. }
  21. }
  22.  
  23. class KlientRow extends Row {
  24. function zanotujZebyWyslacUpomnienie() {
  25.  
  26. }
  27. }
  28.  
  29.  
  30. $klienci = new KlientTable();
  31.  
  32.  
  33. $klient = $klienci->findTychKtórzyNiePlaca();
  34.  
  35. $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 :

  1. $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 (IMG:style_emoticons/default/smile.gif)

Ten post edytował Wolfie 13.08.2009, 12:43:57
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 07:47