Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Czy warto stosować PEAR::DB w OOP oraz czy przechowywać dane w tabliczy czy w osobnych zmiennych ?
become
post
Post #1





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 12.01.2007

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


mam taką klasę

  1. <?php
  2. class Autor() {
  3.  
  4.  var $oDB=null; # obiekt PEAR:(IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) B;
  5.  var $aAutor=null; # zmienna przechowujaca dane autora
  6.  
  7.  function Autor($oDB=null) {
  8. if (!is_null($oDB)) $this->oDB=$oDB;
  9.  }
  10.  
  11.  function dbGetAutorById($id=null) {
  12.  
  13. if (is_null($id) return null;
  14.  
  15. $aQ="
  16.  SELECT *
  17.  FROM autor
  18.  WHERE id=?
  19. ";
  20.  
  21. $aA=$this->oDB->getRow($sQ, array($id), DB_FETCHMODE_ASSOC);
  22. if (is_array($aA) and count($aA)==1) $this->aAutor=$aA;
  23.  }
  24. }
  25. ?>


i pozniej sposob wykorzystania tego

  1. <?php
  2. include "PEAR/DB.php"; 
  3.  
  4.  $oDB=new DB();
  5.  $oDB->connect(DSN);
  6.  
  7.  $autor=new Autor($oDB);
  8.  $autor->dbGetAutorById(234);
  9. ?>


mam pytanie. czy mozna ją tą zbudować ? czy uzycie obiektu klasy PEAR:: DB i przekazanie jej do innej klasy w powyzszy sposob jest prawidlowe ? Czy wogole warto uzywać pakiet PEAR:: DB cyz moze cos innego ?

Drugie pytanie. Czy reprezentawac dane autora jako tablice czy raczej stworzyc osobne zmienne na np. pole imie, nazwisko, email, ktore bedą reprezentowac kolumny w tabeli ?

Ten post edytował become 28.11.2007, 13:22:02
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
NoiseMc
post
Post #2





Grupa: Zarejestrowani
Postów: 398
Pomógł: 10
Dołączył: 24.11.2004
Skąd: Łódź

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


Ja mam osobno Data Objects i Data Access Objects. Data Objects przechowuja tylko dane, a Data Access Objects pobieraja dane z bazy i na ich podstawie zwracaja tablice wypelnionych danymi z bazy Data Objects czyli na przyklad:
  1. <?php
  2. class Products_Product
  3. {
  4. public $productID;
  5. public $categoryID;
  6. public $name;
  7. public $urlSlug;
  8. public $copy;
  9. public $displayOrder;
  10.  
  11.  public function __construct ($productID = null, $categoryID = null, $name = null, $urlSlug = null, $copy = null, $displayOrder = null
  12. {
  13. $this->productID = $productID;
  14. $this->categoryID = $categoryID;
  15. $this->name = $name;
  16. $this->urlSlug = $urlSlug;
  17. $this->copy = $copy;
  18. $this->displayOrder = $displayOrder;
  19. }
  20. }
  21. ?>

  1. <?php
  2. class Products_Model extends Base_Model 
  3. {
  4. public function getAll ()
  5. {
  6. $query = 'SELECT * FROM ' . $this->config->database->prefix . 'products ORDER BY DisplayOrder DESC';
  7.  
  8. $statement = $this->db->prepare ($query);
  9.  
  10. $statement->execute ();
  11.  
  12. while ($product = $statement->fetch ())
  13. {
  14. $products[] = new Products_Product ($product['ProductID'], $product['CategoryID'], $product['Name'], $product['UrlSlug'], $product['Copy'], $product['DisplayOrder'], $product['MetaTitle'], $product['MetaDescription'], $product['MetaKeywords']);
  15. }
  16.  
  17. if (empty ($products))
  18. {
  19. return null;
  20. }
  21.  
  22. return $products;
  23. }
  24. }
  25. ?>

Co do DB to uzywam PDO, ma chyba taka sama funkcjonalnosc jak PEAR:DB, a jest wbudowane w PHP 5 i obiekt DB tworze sobie w klasie bazowej dla Data Access Object:
  1. <?php
  2. class Base_Model 
  3. {
  4. protected $db;
  5. protected $config;
  6.  
  7. public function __construct ()
  8. {
  9. $this->config = Zend_Registry::get ('config');
  10.  
  11. $this->db = new PDO ('mysql:host=' . $this->config->database->host . ';dbname=' . $this->config->database->dbname . '', $this->config->database->username, $this->config->database->password);
  12.  
  13. $this->db->setAttribute (PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  14. $this->db->setAttribute (PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, 1);
  15. }
  16. }
  17. ?>


Korzystam z tego tak:
  1. <?php
  2. $productsModel = new Products_Model ();
  3. $products = $productsModel->getAll ();
  4. ?>

Jezeli w przyszlosci chcialbym zmienic PDO na PEAR:DB to zmieniam to tylko w klasie bazowej dla modelu ... ewentualnie wyrownuje niespojnosc w API obu bibliotek piszac sobie fasade DB_Adapter ktory korzysta z PEAR:(IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) B ale ma API identyczne jak PDO. Zmiana biblioteki DB odbywa sie bez naruszenia pozostalych klas i tylko w klasie bazowej dla Data Access Objects

Ten post edytował NoiseMc 28.11.2007, 15:12:41
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: 9.10.2025 - 03:01