[PHP]MySQL setters i getters |
[PHP]MySQL setters i getters |
13.01.2023, 11:00:53
Post
#41
|
|
Grupa: Moderatorzy Postów: 36 459 Pomógł: 6297 Dołączył: 27.12.2004 |
Generalnie dobrze, ale nie tu
$sku = $product->sku; $sku i inne jest juz prywane wiec masz uzyc getter $sku = $product->getSku(); -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
13.01.2023, 11:29:25
Post
#42
|
|
Grupa: Zarejestrowani Postów: 1 482 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
Tak tak, to dopisałem w poprzednim poście już jako edit, bo wkleiłem wcześniejszą wersję kodu wcześniej. No ok, to działam żeby teraz przerobić całość, a jest tego od groma.
Dzięki! a czy w konstruktorze trzeba pisać : void skoro nic nie zwraca? Ten post edytował sadistic_son 13.01.2023, 11:31:41 -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
13.01.2023, 11:31:13
Post
#43
|
|
Grupa: Moderatorzy Postów: 36 459 Pomógł: 6297 Dołączył: 27.12.2004 |
Nie, konstruktor to przypadek szczegolny
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
13.01.2023, 11:34:10
Post
#44
|
|
Grupa: Zarejestrowani Postów: 1 482 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
A co ma wskazywać typ zwracanych danych w przypadku funkcji która w zależności od warunku zwraca albo false albo np tabliczę czy string?
Ten post edytował sadistic_son 13.01.2023, 11:34:32 -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
13.01.2023, 11:34:34
Post
#45
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Jeszcze to sobie poczytaj: https://designpatternsphp.readthedocs.io/en...ace/README.html (dla setterów)
-------------------- |
|
|
13.01.2023, 11:41:18
Post
#46
|
|
Grupa: Moderatorzy Postów: 36 459 Pomógł: 6297 Dołączył: 27.12.2004 |
Cytat A co ma wskazywać typ zwracanych danych w przypadku funkcji która w zależności od warunku zwraca albo false albo np tabliczę czy string? Jesli tak jest znaczy, ze logika funkcja jest napisana do 4 liter Zwracane moze byc albo DANY TYP albo NULL. Funkcja nie powinna zwracac mieszanych typow bo to znaczy ze cos z nia jest nie tak. Jesli zas chcesz sygnalizowac blad, to nie zwracasz false tylko rzucasz wyjatek -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
13.01.2023, 11:49:04
Post
#47
|
|
Grupa: Zarejestrowani Postów: 346 Pomógł: 70 Dołączył: 15.07.2014 Ostrzeżenie: (0%) |
|
|
|
13.01.2023, 11:59:36
Post
#48
|
|
Grupa: Moderatorzy Postów: 36 459 Pomógł: 6297 Dołączył: 27.12.2004 |
Jeszcze ani razu nie uzylem UNION w moich projektach wiec da sie
Ale sa przypadki gddzie trzeba uzyc, jak np. tu w tej metodzie bind dla $value ktore moze byc roznego typy. Ale to tylko powinny byc bardzo nieliczne wyjatki a juz w ogole nie wyobrazam sobie funkcji, ktora zwraca UNION/mixed... grrrrrrr Zapewne w piekle jest oddzielny kociol tylko dla ludzi uzywajacych za czesto UNION/mixed -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
13.01.2023, 12:09:50
Post
#49
|
|
Grupa: Zarejestrowani Postów: 1 482 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
Dobra, rozumiem.
ale w takim razie czemu np TUTAJ jest public PDO::lastInsertId(?string $name = null): string|false ? Jak rozumiem ma tutaj zastosowanie powiedzenie "co wolno wojewodzie to nie tobie smrodzie" I jak wtedy będzie wyglądać deklaracja tej metody?
Ten post edytował sadistic_son 13.01.2023, 12:11:27 -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
13.01.2023, 12:32:29
Post
#50
|
|
Grupa: Moderatorzy Postów: 36 459 Pomógł: 6297 Dołączył: 27.12.2004 |
Metody PHP istnieja od wiekow, kiedy byla jeszcze ciemnosc i zwracali co zwracali. Teraz by zachowac kompatybulnosc wsteczna nie moga ot tak sobie wszystko pozmieniac bo miliony stron przestanie dzialac. Temu w starych metodach php masz jeszcze smietnik i sie tym nie kieruj
Zas u ciebie to albo tak: public function lastInsertId(): int { return (int) $this->dbh->lastInsertId(); } Albo tak public function lastInsertId() ?int { $id = $this->dbh->lastInsertId(); return $id ? $id : null; } Ja zawsze osobiscie stosuje te pierwsza metode. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
13.01.2023, 12:36:25
Post
#51
|
|
Grupa: Zarejestrowani Postów: 1 482 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
Czyli bezczelnie przerabiamy string z PDO na int. Czaję. Dzięki.
Ten post edytował sadistic_son 13.01.2023, 12:58:35 -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
13.01.2023, 12:47:48
Post
#52
|
|
Grupa: Moderatorzy Postów: 36 459 Pomógł: 6297 Dołączył: 27.12.2004 |
lastInsertId z PDO to metoda uniwersalna. Rozne silniki jako ID maja albo teksty, albo inty itp
Ty uzywasz mysql i jako ID masz inty, wiec mozna spokojnie to co zwraca lastInsertId rzutowac na INT -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
13.01.2023, 12:58:57
Post
#53
|
|
Grupa: Zarejestrowani Postów: 1 482 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
Rozumiem. Dzięki.
A wracając do setter/getter.... Oto kawałek klasy ProductList
Metody getProducts oraz listProducts wziąłem właściwie z książki, modyfikując jedynie zapytanie SELECT. Czemu tutaj jest to tak zrobione? Po co w ogóle jest listProducts ? Nie lepiej zostawić tylko getProducts i mieć już stworzony przy okazji getter dla wylistowanych produktów? Nastepnie zmieniając nazwę z listGroupedProducts na getGroupedProducts otrzymuję getter dla pogrupowanych produktów, czy tak? Czy getter/setter to właściwie tylko nazewnictwo i mozna przyjąć że jak coś zwraca np pogrupowane rekordy z bazy to będzie to getter? Czy może istnieć getter bez settera i odwrotnie? Tzn istnieć może i kod będzie działał, ale czy tak się robi? Męcze te gettery i settery pamiętając o wymaganiu projektu: "Logika MySQL powinna być obsługiwana przez obiekty z właściwościami, zamiast bezpośrednich wartości kolumn. Proszę użyć setters i getters aby to osiągnąć oraz nie zapomnieć użyć ich do zapisu i wyświetlania logiki." Ten post edytował sadistic_son 13.01.2023, 12:59:49 -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
13.01.2023, 13:35:46
Post
#54
|
|
Grupa: Moderatorzy Postów: 36 459 Pomógł: 6297 Dołączył: 27.12.2004 |
listProducts wydaje sie zbedne, tak.
Zas z ta logika co pisali to chyba im chodzi, ze zamiast zwracac tablice z rekordami w postaci tablicy, masz zwraca tablice obiektow, wtym wypadku obiektow Product -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
13.01.2023, 13:52:53
Post
#55
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
W sumie zwracał CI już na to uwagę ale po co wprowadzasz zmienne które nie mają żadnego celu?
-------------------- |
|
|
13.01.2023, 14:06:16
Post
#56
|
|
Grupa: Zarejestrowani Postów: 1 482 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
W sumie zwracał CI już na to uwagę ale po co wprowadzasz zmienne które nie mają żadnego celu? Ok, rzeczywiście. Wiesz... tak jak powyżej ponoć robią początkujący programiści, bo tak jest niby czytelniej. Moje przyzwyczajenie. Ale wiem że nie powinno się tak robić, bo tym sposobem alokuję podwójnie pamięć, zupełnie zbędnie.
Zas z ta logika co pisali to chyba im chodzi, ze zamiast zwracac tablice z rekordami w postaci tablicy, masz zwraca tablice obiektow, wtym wypadku obiektow Product Czekaj bo lekko się teraz pogubiłem. Masz na myśli w tym wypadku tak jak już mam via getProducts(); czy masz na myśli że w klasie ProductList mam jakoś wrzucać to co zwraca mi np getProducts do Product poprzez settery klasy Product?
Ten post edytował sadistic_son 13.01.2023, 14:08:51 -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
13.01.2023, 14:27:13
Post
#57
|
|
Grupa: Moderatorzy Postów: 36 459 Pomógł: 6297 Dołączył: 27.12.2004 |
No pewnie listGroupedProducts powinna juz zwracac tablice oboektow (producktow)
Ale twoje produkty maja jeszcze wlasciwosci wiec pewnie musisz rozszerzyc klase Product o te wlasciwosci/properties -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
13.01.2023, 15:10:55
Post
#58
|
|
Grupa: Zarejestrowani Postów: 1 482 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
No dobra, to rozszerzyłem klasę Product o $properties:
Następnie zmodyfikowałem listGroupedProducts tak aby zwracała tablicę obiektów: Lecz edytor podpowiada mi tutaj w przedostatniej linijce (nie licząc domknięć nawiasów), że "assigning void from a function setProperties". No jest void bo każdy setter ma ustawione void, więc czemu tylko p[rzy tym jednym się czepia? W ogóle dobrze tutaj rozumuję? To miałeś na mysli mówiąc że ta metoda powinna zwracać tablicę obiektów? Ten post edytował sadistic_son 13.01.2023, 15:13:39 -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
13.01.2023, 15:21:00
Post
#59
|
|
Grupa: Moderatorzy Postów: 36 459 Pomógł: 6297 Dołączył: 27.12.2004 |
array('name' => $productObject->setproductName($row['name']), 'price' => $productObject->setproductPrice($row['price']),
No ale co to jest? Raz ze tak jak mowi edytor, przypisujesz dla 'name' wartosc funkcji setProductName ktora nic nie zwraca. No gdzie sens i logika? A po drugie czemu znowu tworzysz tablice tablic? Masz tworzyc tablice obiektow
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
13.01.2023, 15:34:58
Post
#60
|
|
Grupa: Zarejestrowani Postów: 1 482 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
No ok, ale w takim razie co ma być w ttych warunkach, bo już zgłupiałem:
EDIT: nie no zaraz, nowy obiekt mam tworzyć wewnątrz pierwszego warunku, aco w takim razie w drugim? Tak? Nie no to też bez sensu bo przecież pierwszy warunek nigdy nie będzie spełniony. Tzn zawsze będzie empty. Na końcu musi być tak: $products[$row['sku']] = $product; EDIT2: Na takim czymś stanąłem: I chyba to jest to co ma być bo tablica przypomina ta co była wcześniej, zanim tworzyliśmy tablicę obiektów: Kod Array
( [MBL-0005] => Product Object ( [productId:Product:private] => 399 [productName:Product:private] => Mebel 5 [sku:Product:private] => MBL-0005 [price:Product:private] => 105 [properties:Product:private] => Array ( [0] => Array ( [value] => 95 [label] => Width (cm) ) [1] => Array ( [value] => 125 [label] => Length (cm) ) [2] => Array ( [value] => 65 [label] => Height (cm) ) ) ) [FLM-0004] => Product Object ( [productId:Product:private] => 398 [productName:Product:private] => Film 4 [sku:Product:private] => FLM-0004 [price:Product:private] => 14 [properties:Product:private] => Array ( [0] => Array ( [value] => 654 [label] => Size (MB) ) ) ) [KSK-0004] => Product Object ( [productId:Product:private] => 397 [productName:Product:private] => Ksiazka 4 [sku:Product:private] => KSK-0004 [price:Product:private] => 14 [properties:Product:private] => Array ( [0] => Array ( [value] => 0.4 [label] => Weight (kg) ) ) ) Ten post edytował sadistic_son 13.01.2023, 15:59:45 -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
Wersja Lo-Fi | Aktualny czas: 30.04.2024 - 15:43 |