Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Tworzenie wielu obiektów, przez static albo inaczej?
-Gość-
post
Post #1





Goście







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();
Go to the top of the page
+Quote Post
freemp3
post
Post #2





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


Możesz przekazać w parametrze.
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #3





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


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. }
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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 to the top of the page
+Quote Post
-Gość-
post
Post #5





Goście







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?
Go to the top of the page
+Quote Post
freemp3
post
Post #6





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


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ć.
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #7





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


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. }


Ten post edytował b4rt3kk 28.10.2013, 16:05:50
Go to the top of the page
+Quote Post
-Gość-
post
Post #8





Goście







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?
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #9





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


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 to the top of the page
+Quote Post
-Gość-
post
Post #10





Goście







Zgadza się nie ma dla widoku, tak samo jak dla kompilatora nie ma znaczenia czy piszę obiektowo czy strukturalnie (IMG:style_emoticons/default/smile.gif) Jednak chciałbym przyswoić sobie dobre nawyki :-)
Go to the top of the page
+Quote Post
-Gość-
post
Post #11





Goście







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
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #12





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


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. }
Go to the top of the page
+Quote Post
Dejmien_85
post
Post #13





Grupa: Zarejestrowani
Postów: 251
Pomógł: 23
Dołączył: 23.04.2013

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


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.
Go to the top of the page
+Quote Post
freemp3
post
Post #14





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


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ć.
Go to the top of the page
+Quote Post

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: 24.08.2025 - 02:29