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.


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
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. }


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
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ć.


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
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


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
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ść.


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
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 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. }


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
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ć.


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 14:34