Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Tworzenie wielu obiektów
Forum PHP.pl > Forum > Przedszkole
Gość
Witam, mam nurtujące mnie pytanie na które nie mogę znaleźć odpowiedzi. Chcę napisać klasę, która z bazy odczytuje załóżmy wszystkie artykuły na dany temat. Łącze się z bazą przez pdo i teraz.. jak odczytać z tej bazy wszystkie artykuły? Czy przez metodę statyczną z tej klasy? Jak wtedy przekazać do niej pdo? Czy za pomocą pętli ale wtedy to takie strukturalne obejście...?

  1. class Art {
  2. protected $db;
  3.  
  4. public function __construct($db) {
  5. $this->db=$db;
  6. echo 'test1';
  7. }
  8.  
  9. public static function pobierz() {
  10. // jak tu dodac obiekt bazy?
  11. echo 'test2';
  12. }
  13. }
  14.  
  15. $db = new PDO('mysql:dbname=art;host=127.0.0.1', 'root', 'admin');
  16.  
  17. User::pobierz();
freemp3
Możesz przekazać w parametrze.
b4rt3kk
Stwórz sobie klasę, która będzie obsługiwać połączenie z bazą danych (choć nie koniecznie), a następnie wewnątrz klasy Art użyj jej metody, np. tak:

  1. class Art {
  2.  
  3. private $dbHandle;
  4.  
  5. function __construct() {
  6. $this->dbHandle = mojaKlasaPDO::connect();
  7. }
  8.  
  9.  
  10. function pobierz() {
  11. $this->dbHandle->query("SELECT * FROM tabela");
  12. // itd.
  13. }
  14. }
Crozin
Nie bierz się sam za to. Mapowanie danych z bazy na obiekty to dosyć skomplikowane zadanie, na pewno za skomplikowane dla początkującego. Skorzystaj z Doctrine bądź innego, gotowego ORM-a.
Gość
b4rt3kk - i w tym momencie mam 1 obiekt Art i w nim odczytaną tablicę z bazy, jak z tego zrobić wiele obiektów typu Art? Czy może ja źle rozumuje? Nie kazdy artykuł powinien byc osobnym obiektem?
freemp3
W jakim celu chcesz tworzyć dla każdego z nich obiekt? Nie ma sensu robić tylu obiektów, jeśli posłużą one tylko do wyświetlenia lub jakiejś innej prostej operacji. Napisz co dokładnie chcesz zrobić.
b4rt3kk
Cytat(Gość @ 28.10.2013, 15:51:12 ) *
b4rt3kk - i w tym momencie mam 1 obiekt Art i w nim odczytaną tablicę z bazy, jak z tego zrobić wiele obiektów typu Art? Czy może ja źle rozumuje? Nie kazdy artykuł powinien byc osobnym obiektem?


To zależy co chcesz dalej zrobić z tymi wynikami z bazy. Ale oczywiście możesz zwrócić objekt.

  1. function pobierz() {
  2. $stmt = $this->dbHandle->query("SELECT * FROM tabela");
  3. $obj = array();
  4. while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
  5. $obj[] = new stdClass;
  6. foreach ($row as $key => $item) {
  7. end($obj);
  8. $obj[key($obj)]->$key = $item;
  9. }
  10. }
  11. return $obj;
  12. }
Gość
Cytat(freemp3 @ 28.10.2013, 16:00:47 ) *
W jakim celu chcesz tworzyć dla każdego z nich obiekt? Nie ma sensu robić tylu obiektów, jeśli posłużą one tylko do wyświetlenia lub jakiejś innej prostej operacji. Napisz co dokładnie chcesz zrobić.


Ano w takim, że aktualnie jestem na etapie przyswajania oop i chcę zrozumieć z czym to się je, zgadza się aktualnie będzie to tylko wyświetlanie arta i np. autora i godziny ale jakby to był sklep a w nim różne parametry artykułow to raczej każdy będzie osobnym obiektem.

b4rt3kk - w Twoim przykładzie tworzysz obiekt z zupełnie innej klasy niż klasa Art. Czy to dobre rozwiązanie? Idąc tym tropem tworzę klasę coś w stylu PobierzArty i w z niej stworzonym obiekcie tworzę obiekty z klasy Art?
b4rt3kk
Cytat(Gość @ 28.10.2013, 16:16:43 ) *
Ano w takim, że aktualnie jestem na etapie przyswajania oop i chcę zrozumieć z czym to się je, zgadza się aktualnie będzie to tylko wyświetlanie arta i np. autora i godziny ale jakby to był sklep a w nim różne parametry artykułow to raczej każdy będzie osobnym obiektem.

b4rt3kk - w Twoim przykładzie tworzysz obiekt z zupełnie innej klasy niż klasa Art. Czy to dobre rozwiązanie? Idąc tym tropem tworzę klasę coś w stylu PobierzArty i w z niej stworzonym obiekcie tworzę obiekty z klasy Art?


Wg mnie nie ma zbyt dużej różnicy w tym, że do widoku przekażesz sobie np. tablicę, a nie obiekt i nie ma tu znaczenia fakt, że jakiś produkt w sklepie będzie miał więcej atrybutów od innego.

stdClass to pusty obiekt, który w przykładzie uzupełniłem wartościami na zasadzie klucz->wartość.
Gość
Zgadza się nie ma dla widoku, tak samo jak dla kompilatora nie ma znaczenia czy piszę obiektowo czy strukturalnie smile.gif Jednak chciałbym przyswoić sobie dobre nawyki :-)
Gość
Korzystając z takiej tablicy jak podałeś (pusty obiekt) lub tablica elementów nie mogę zrobić na nim metod mojej klasy, które dla przykładu będą typu usuń/zmień, więc nijak ma to się do oop
b4rt3kk
Cytat(Gość @ 28.10.2013, 16:41:26 ) *
Korzystając z takiej tablicy jak podałeś (pusty obiekt) lub tablica elementów nie mogę zrobić na nim metod mojej klasy, które dla przykładu będą typu usuń/zmień, więc nijak ma to się do oop


Dlatego pytałem, co chcesz dalej zrobić z tymi wynikami pobranymi z bazy. W takim bądź razie, możesz zrobić tak:

  1. function pobierz() {
  2. while ($row = ...) {
  3. $this->results[] = $row;
  4. }
  5. return $this;
  6. }
Dejmien_85
Gościu drogi, ja Ci polecam zajrzenie do dokumentacji popularnych ORM-ów (Doctrine, Propel) - szybko nabierzesz pojęcia co i jak się robi. Polecam także zerknięcie do dokumentacji znanych frameworków PHP - to także Ci pomoże.

Na forum Ci wszystkiego nie wytłumaczą, musisz to poczuć. Przejrzeć kod, nabrać pojęcia itd.
freemp3
Cytat
Jednak chciałbym przyswoić sobie dobre nawyki :-)

W takim razie polecam zapoznanie się z metodą KISS
Programowanie obiektowe to nie wszystko. Trzeba wiedzieć jak i gdzie używać, żeby nie przesadzić.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.