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
 
Start new topic
Odpowiedzi
230005
post
Post #2





Grupa: Zarejestrowani
Postów: 316
Pomógł: 36
Dołączył: 2.04.2008

Ostrzeżenie: (0%)
-----


Pewnie bardziej niż tamto (IMG:style_emoticons/default/winksmiley.jpg) . Ale wciąż nie rozumiem dlaczego ze zmiennej db czynisz publiczną. Nie wiem co powiedzą inni, ale przynajmniej ja tak nie programuję dopóki nie jest to absolutnie niezbędne. Jest milion innych rozwiązań twojego problemu więc radzę żebyś się wysilił i znalazł rozsądniejsze.
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: 13.10.2025 - 21:48