![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 1 495 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Cześć.
Walczę z kolejnym wymogiem projektu nad którym siedzę. "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." Póki co to nie użyłem setter/getter. Pokażcie proszę na przykładzie mojego poniższego kodu jak to powinno być zastosowane. Klasa Produkt
Kawałek klasy ProductAdd z metodą wrzucającą do bazy:
-------------------- 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! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Ja nie wiem na kiedy masz to zrobic, ale warto by bylo bys jednak odszedl na razie od tego projektu i poprostu przelecial glowne rzeczy z OOP, poprawcowal na przykladach tam podanych i dopiero potem majac juz jakas tam wiedze z oop bral sie za ten projekt.
Bo teraz im wiecej do niego dodajesz tym coraz bledow robisz. Z tego co ci mowimy to zapamietujesz w najlepszym wypadku moze polowe, a i to nie zawsze, wiec z kazdym koljneym tematem trzeba ci na nowo mowic to co sie juz mowilo milion razy i troche to powoduje drganie zylki na czole ![]() Ale dobra, wypunktuje pare rzeczy, i wracam do pracy 1) klasa masie nie dobierac do zadnego POST. Klasy nie interesuje czy dane pochodza z POST czy marsa. klasa ma dostac dane jako parametr. W twoim przypadku przekaz tablice w konstruktorze Produkt i sobie ustaw co masz ustawic Choc wg wymagan co tu napisales to w konstruktorze nic nie przekazujesz tylko uzywasz masz setter/getter 2) public $productName; public $sku; public $price; public $productType; Naprawde nie wiesz ze productName to string a price to float i nie mozesz tego ustawic? 3) ensureNoEmpytValues() Nie, klasa produkt ma nie robic za walidator. Masz miec validator ktory przyjmie obiekt klasy Product i on stwierdzi czy jest wypelniony czy nie 4) juz ci mowilem, klasa nie wie o zadnych STALYCH w programie. Klasa ma dostac niezbedne dane np. w konstuktorze. Mowie tu o klasie DB ktore magicznie wie ze w programie sa stale z HOSTEM, PASSWORD itp. 5) Nie, klasa insert product pod zadnym pozorem nie dziedziczy po Produkt. Metoda tej klasy dostaje obiekt Produkt i na nim pracuje a nie dziedziczy 6) $db = new DB(); No nie. Obiekt klasy DB masz stworzyc tylko raz, gdzies np w index.php i ten obiekt masz przekazywac do klas, ktore beda go wymagaly. Poczytaj o DI (dependency injection) 7) W ostatnich tematach bylo jeszcze wiecej bledow ale juz nie pamietam zas to o co pytasz to banalne settery, w kazdym lepszy arcie o tym masz, czyli nie
a
i metody
a potem w kodzie
i pobranie -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 495 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Ja nie wiem na kiedy masz to zrobic Na piątek.warto by bylo bys jednak odszedl na razie od tego projektu i poprostu przelecial glowne rzeczy z OOP, poprawcowal na przykladach tam podanych i dopiero potem majac juz jakas tam wiedze z oop bral sie za ten projekt. Jeśli odejdę od tego projektu, to obecnej pracy nie zmienię przynajmniej do maja, a jak zostanę w niej na dłużej to... Nie chcę myśleć. Bo teraz im wiecej do niego dodajesz tym coraz bledow robisz. Przerobiłem książkę i wydawało mi się to wszystko jasne. Kod z niej rozumiałem, tłumaczenia też. Ogólne zasady OOP też, a przynajmniej tak mi się wydawało. Więc stwierdziłem, że najlepszym trenerem jest praktyka i zacząłem pisać projekt. No i tutaj się okazało, że jednak wydawało mi się, że coś było jasne (póki to czytałem), a w międzyczasie również, że ta książka to szajs - że jest w niej pełno literówek, różnych błędów logicznych, że uczy złych praktyk. Więc nie chcę do niej wracać. Okazało się tez po drodze, że php zmienia się z wersji na wersję bardziej niż sądziłem, a co za tym idzie ciężej zaraz ufać różnym artykułom i samouczkom znalezionym w google, bo rzadko udaje się coś z 2022 dorwać. Stąd moje ciągłe pytania tutaj - odpowiedzi są zawsze aktualne ![]() Ale dobra, wypunktuje pare rzeczy, i wracam do pracy. Dzięki, opisałeś to jasno. Przynajmniej tak mi się wydaje, a głowę mam już napuchniętą o tej godzinie. Mój projekt już funkcjonalnie działa. Teraz czas na poprawianie błędów w OOP - przebudowywanie klas wedle tego co napisałeś powyżej. Mam nadzieję, że jutro się z tym wyrobię, bo na czwartek zostawiam sobie javascript i wieczorem wysyłam. -------------------- 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! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
No dobra, nie pozostalo w takim razie nic innego jak zyczyc powodzenia
![]() No to mecz nas do tego czwartku, ale nie zapominaj polowy w miedzyczasie ![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 495 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
No dobra, nie pozostalo w takim razie nic innego jak zyczyc powodzenia Dzięki.![]() No to mecz nas do tego czwartku, ale nie zapominaj polowy w miedzyczasie ![]() Uff, no to zabieram się. JS jednak już dziś męczyłem. 6) $db = new DB(); Przeczytałem TO. Obawiam się, że nie zdążę tego opanować tak żeby jeszcze przerobić właściwie cały mój kod do (końca) jutra. Bez DI $db = new DB(); w index.php i po wywaleniu z reszty kodu (wszystkich metod z różnych klas) oczywiście nie działa. No nie. Obiekt klasy DB masz stworzyc tylko raz, gdzies np w index.php i ten obiekt masz przekazywac do klas, ktore beda go wymagaly. Poczytaj o DI (dependency injection) nospor - czy pozostawienie tego tak jak jest, tj. tworzenie nowego obiektu DB(string $db_name_itd) w różnych metodach, gdzie tego potrzebuję to jest taki fatalny błąd i skreśla całą aplikację? Czy jednak da się na to przymknąć oko u kogoś kto na juniora aspiruje? Czy wystarczy zrobić $db = new DB(); w index.php i potem do każdej metody wymagającej bazy tylko przekazywać $db jako parametr? Tak cię zrozumiałem powyżej. insertNewUser($db, $userName); Ten post edytował sadistic_son 12.01.2023, 12:22: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! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Czy jednak da się na to przymknąć oko u kogoś kto na juniora aspiruje? Jesli na juniora to powinno ujsc. Nie mnie jednak nie moge powiedziec jak oni beda na to patrzec. A dlaczago to jest blad? Bo ile tazy robisz $db = new DB(); to tyle razy tworzysz nowe polaczenie do bazy danych. Raz pracowalem nad projektem gdzie ludzei tak robili 27 razy w jednym request i tworzylo sie 27 nowych polaczen do bazy danych, tylko dla jednego requst. A szefostwo ciagle narzekalo ze zasoby im zzera i aplikacja wolno dziala.... jesli nie chcesz tego robic jako DI, zrob z tego singleton. 10minut roboty Przypomnij mi twoja klase DB Zreszta tu masz szybkie wyjasnienie https://designpatternsphp.readthedocs.io/pl...ton/README.html -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 495 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
W chwili obecnej moja klasa DB wygląda tak:
Nowy obiekt w index.php:
Generalnie to w index zaciąga config.php przez require. W config natomiast nie mam żadnej klasy, tylko mam podefiniowane stałe do DB oraz include DB.php, Product.php oraz PageDisplay.php (która to dalej zaciąga więcej klas). Teraz na początku ProductList.view.php tworze obiekt $products = new ProductList($db); i tutaj zmienna $db jest nieznana. Coś mi świta sprzed lat, że to przez to że raz używam require a raz include. Jedno z nich chyba do zaciągniętego pliku nie przekazuje zmiennych z zaciągającego pliku. dobrze kombinuję? jesli nie chcesz tego robic jako DI, zrob z tego singleton. 10minut roboty Może dla ciebie ![]() Ten post edytował sadistic_son 12.01.2023, 12:46:30 -------------------- 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! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Teraz na początku ProductList.view.php tworze obiekt $products = new ProductList($db) $products powinno byc przekazane do ProductList.view.php a nie tworzone w ProductList.view.php A jak tworzysz/owierasz ProductList.view.php ? Cytat W config natomiast nie mam żadnej klasy, tylko mam podefiniowane stałe do DB oraz include DB.php, Product.php oraz PageDisplay.php Czemu w config tworzysz/zaciagasz DB i Product i PageDisplay? No i skoro PageDisplay zarzadza caloscia, to $db masz przekazac do PageDisplay, to wtedy rzeczy w PageDisplay beda widziec $db. No to sa podstawy z Zasiegu Zmiennych https://www.php.net/manual/en/language.variables.scope.php -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 1 495 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Czemu w config tworzysz/zaciagasz DB i Product i PageDisplay? Tak mi się wydawało rozsądnie na bazie tego co przerobiłem ze wspomnianej nie raz książki, której przerobienia teraz żałuję. A gdzie mam wtedy zaciągać DB i PageDisplay (Product na razie powstało ale nic jeszcze nie robi ![]() No i skoro PageDisplay zarzadza caloscia, to $db masz przekazac do PageDisplay, to wtedy rzeczy w PageDisplay beda widziec $db. No to sa podstawy z Zasiegu Zmiennych Zasięg zmiennych to jeszcze ogarniam. Chyba... :| Ale zaraz to się wyjaśnie jak opiszę moją strukturę.https://www.php.net/manual/en/language.variables.scope.php Tak więc w index.php mam niewiele:
w configu definuję stałe do DB (to dobre miejsce na to , tak?) oraz zaciągam DB.php oraz PageDisplay.php. Teraz PageDisplay wg mojego założenia miała sprawdzać którą z dwóch podstron wybrano (liste produktów lub dodawanie produktu). W index.php ją wywołuję i przekazuję w parametrach $request oraz $db. Jeszcze nie zabrałem się za jej porządkowanie, więc wiem że idzie zwymiotować jak się na nią patrzy. Tak - zaciąga stałe a nie powinna, ma w sobie $_POST a powinna go dostać w parametrze. Wiem to wszystko już, i zamierzam ją oczyścić. A zacząłem od $db. Wygląda ona tak:
Teraz jak widać switch decyduje o tym (poprzez include) która strona ma się wyświetlić. Nie wiem czy chcę się tutaj dzielić ProductAdd.php i ProductList.php bo tam to już jest kompletny p1erdolnik i mi wstyd :| EDIT: to moje ProductList.php Chyba nie wygląda jeszcze, aż tak źle, żeby mnie postawić przed ścianą egzekucyjną.
Ten post edytował sadistic_son 12.01.2023, 13:13:47 -------------------- 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! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Nie wiem czy chcę się tutaj dzielić ProductAdd.php i ProductList.php bo tam to już jest kompletny p1erdolnik i mi wstyd :| Gorzej juz nie bedzie pokazuj, a potrzebuje tego by widziec co z tym $db dalej robic No dobra, tu masz blad $productObject = new ProductAdd($db); przeciez nie $db a $this->db $productObject = new ProductAdd($this->db); zakladam ze z produktList jest podobnie -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 1 495 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Ok, to ProductList wkleiłem wyżej a tutaj największy burdel - ProductAdd. Zaznaczam, że jeszcze tutaj jest zupełnie przed czyszczeniem tych klas - używają $_POST wewnątrz, nie ma konstruktorów, setter/getter itd. Nie ma wszędzie typowania zmiennych czy tego co ma zwracać metoda. To wszystko do poprawienia jeszcze.
No i Product.php. Jednak coś tam robi. Nawet zapomniałem, że to napisałem.
EDIT: Gorzej juz nie bedzie pokazuj, a potrzebuje tego by widziec co z tym $db dalej robic No dobra, tu masz blad $productObject = new ProductAdd($db); przeciez nie $db a $this->db $productObject = new ProductAdd($this->db); zakladam ze z produktList jest podobnie A no tak, przecież $db to ona jest w index, a wewnątrz klasy to już jest $this->db ![]() Lecę na zakupy na obiad i za 45 minut zabieram się za porządkowanie tego bałaganu. Czy w międzyczasie byłbyś uprzejmy mi z grubsza opisać jak naprawić konstrukcję tej strony, żeby choć przypominała jakiś wzorzec projektowy? W którym miejscu najlepiej porobić setter/getter żeby wykazać że wiem o co w nich chodzi (wymóg projektu)? Jest tu jakaś klasa z której można zrobić abstrakcyjną i byloby to uzasadnione? Ten post edytował sadistic_son 12.01.2023, 13:20:29 -------------------- 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! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
![]()
Post
#12
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Jak pisalem wczesniej:
nie $productObject = new ProductAdd($db); a $productObject = new ProductAdd($this->db); No i skoro $db to obiekt klasy DB to nie private $db; public function __construct($db){ $this->$db = $db; } a private DB $db; public function __construct(DB $db){ $this->$db = $db; } Cytat W którym miejscu najlepiej porobić setter/getter żeby wykazać że wiem o co w nich chodzi (wymóg projektu)? No jak zrobic setter/getter przeciez ci podalem w pierwszym poscie tego wlasnie tematu. Cytat Jest tu jakaś klasa z której można zrobić abstrakcyjną i byloby to uzasadnione? Tan caly balagan to jedna wielka abstrakcja wiec juz masz ![]() A na powaznie, nachwile obecna nie widze gdzie to by mozna bylo dac, za duzy balagan i za malo czasu by poprawiac class ProductAdd extends Product Pisalem, ze ProductAdd nie moze dziedziczyc po Produkt, tylko ma dostac Produkt gdzie trzeba. public function insertNewProduct(Product $product) -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 1 495 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
No jak zrobic setter/getter przeciez ci podalem w pierwszym poscie tego wlasnie tematu. Tak tak, jak zrobić i w którym miejscu danej klasy to rozumiem - pisałeś. Ale moje pytanie było bardziej typu - czy dla każdej klasy to robić? Czy są jakieś uzasadnienia kiedy getter/setter nie robić? Czy w moim powyższym kodzie jest jakaś klasa w której szczególnie aż rzuca się w oczy że powinny byś gettery i settery?Tan caly balagan to jedna wielka abstrakcja wiec juz masz Serio jest aż tak źle, że nawet kandydat na juniora powinien się wstydzić?![]() class ProductAdd extends Product Pisalem, ze ProductAdd nie moze dziedziczyc po Produkt, tylko ma dostac Produkt gdzie trzeba. public function insertNewProduct(Product $product) Ok, clear. Nie zdążyłem tego jeszcze poprawić. I tak dziś to wygląda to wszystko już dużo lepiej niż jeszcze choćby 24h temu. A czy sama klasa Product jest zrobiona należycie? Ten post edytował sadistic_son 12.01.2023, 14:07:00 -------------------- 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! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
![]()
Post
#14
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
napisz te setter dla Product tylko.
Cytat Serio jest aż tak źle, że nawet kandydat na juniora powinien się wstydzić? Ja tylko mowie ze jest balagan a nie ze maszs sie wstydzic. Wybacz, nie jestem za dobry w social talks ![]() Cytat A czy sama klasa Product jest zrobiona należycie? NO teraz nie. NIe masz setterow/getterow tylko w construktorze pobierasz z POST Dodatkowo masz tam validacje napisana a mowilem ci tez juzze walidacja ma byc gdzie indziej. Klasa Product wg rozumienia DTO, a w tym kontekscie to bylo pisane, ma miec tyko pola, ktore chcesz wypelnic no i te settery/gettery i to wszystko -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 1 495 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
napisz te setter dla Product tylko. Ja tylko mowie ze jest balagan a nie ze maszs sie wstydzic. Wybacz, nie jestem za dobry w social talks ![]() NO teraz nie. NIe masz setterow/getterow tylko w construktorze pobierasz z POST Dodatkowo masz tam validacje napisana a mowilem ci tez juzze walidacja ma byc gdzie indziej. Klasa Product wg rozumienia DTO, a w tym kontekscie to bylo pisane, ma miec tyko pola, ktore chcesz wypelnic no i te settery/gettery i to wszystko Ok, rozumiem. Zabrałem się za to, ale najpierw zrobiłem sobie backup plików. A następnie sprawdziłem czy wszystkie funkcjonalności działają. I kurde nie dodaje mi nowego produktu okazało się. Doszedłem do tego że właśnie ta metoda ensureNoEmpytValues z Product zwraca false. Natomiast var dump z POST wygląda ok: Kod Array Coś gdzieś po drodze spieprzyłem i nie potrafię znaleźć co. Wygląda na to, że metoda z klasy ProductAdd, która w chwili obecnej nadal dziedziczy po Product, nie widzi tych miennych:( [save] => save [sku] => NoweSKU [name] => photos [price] => 120 [productType] => Book [weight] => 1 } $sku = $this->sku; $productName = $this->productName; $price = $this->price; $selectedType = $this->productType; Dlaczego? W Product jest konstruktor do sku, price itd. Następnie dziedzicząca klasa nie wie co to jest $this->sku ... -------------------- 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! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
![]()
Post
#16
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Coś gdzieś po drodze spieprzyłem i nie potrafię znaleźć co. Wygląda na to, że metoda z klasy ProductAdd, która w chwili obecnej nadal dziedziczy po Product, nie widzi tych miennych: $sku = $this->sku; $productName = $this->productName; $price = $this->price; $selectedType = $this->productType; No logicznie przeciez. Jesli zrobiles jak mowilem czyli public function insertNewProduct(Product $product) to te zmienne masz w $product->productName itd itd. No chyba ze juz gettery masz to wtedy uzyj getterow -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 1 495 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Nic jeszcze nie zrobiłem, bo od godziny (odkąd poprawiłem wszędzie wszystko odnosnie $db) to się głowię czemu nie dodaje nowego produktu.
Tak więc w chwili obecnej mam tak:
Tak więc na razie metoda klasy ProductAdd dziedziczącej po Product powinna znać $this->productName prawda? A generalnie wynika z tego że ensureNoEmpytValues zwraca false, czyli nawet sama klasa Product nie wie co to za zmienne. A POST przechodzi. Natomiast kiedy zrobię tak public function insertNewProduct(Product $product) to mam za mało argumentów. Kod Fatal error: Uncaught ArgumentCountError: Too few arguments to function nameOne\ProductAdd::insertNewProduct(), 0 passed in pagefiles/PageDisplay.php on line 41 and exactly 1 expected in pagefiles/ProductAdd.php:76 Stack trace: #0 pagefiles/PageDisplay.php(41): nameOne\ProductAdd->insertNewProduct() #1 /public_html/index.php(36): nameOne\PageDisplay->decideOnContent() #2 {main} thrown in pagefiles/ProductAdd.php on line 76
Ten post edytował sadistic_son 12.01.2023, 15:08:00 -------------------- 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! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
![]()
Post
#18
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Kurcze, ale ty nadal dziedziczysz po Produkt.
A pewnie masz jeszcze konstruktor w ProductAdd ktory nadpisuje ci konstruktor z Produkt, temu twoje rzeczy nie sa ustawione bo konstruktor z Product sie nie odpala... Jesli nadal chcesz miec to swoje bezsensoswne dziedziecznie to w konstuktorze ProductAdd masz wywolac konstuktor z Product class ProductAdd extends Product { private $db; public function __construct($db){ $this->$db = $db; parent::__construct(); } -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 1 495 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Jesli nadal chcesz miec to swoje bezsensoswne dziedziecznie to w konstuktorze ProductAdd masz wywolac konstuktor z Product Zamierzam się go pozbyć, ale na razie chcę mieć działającą stronę (mimo chaosu w kodzie), a po uprzednich poprawkach z dziś już ona nie działa ![]() Dodałem konstruktor rodzica, to mnie uderzyło tym... Kod Fatal error Kurde, opadam z sił. Jest uczucie rezygnacji : Uncaught TypeError: Cannot assign null to property Product::$productName of type string in /home/xxx/domains/xxx/public_html/pagefiles/Product.php:12 Stack trace: #0 /home/xxx/domains/xxx/public_html/pagefiles/ProductAdd.php(12): Product->__construct() #1 /home/xxx/domains/xxx/public_html/pagefiles/views/ProductAdd.view.php(4): nameOne\ProductAdd->__construct(Object(nameOne\DB)) #2 /home/xxx/domains/xxx/public_html/pagefiles/PageDisplay.php(55): require('/home/xxx/do...') #3 /home/xxx/domains/xxx/public_html/index.php(36): nameOne\PageDisplay->decideOnContent() #4 {main} thrown in /home/xxx/domains/xxx/public_html/pagefiles/Product.php on line 12 ![]() ![]() EDIT: Tak, bo teraz jak tylko wejdę na stronę to konstruktor działa i sprawdza czy $_POST są podane. A że nie ma to próbuje dac im null. Ale czemu nie może przypisać? Ten post edytował sadistic_son 12.01.2023, 15:16:03 -------------------- 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! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
![]()
Post
#20
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Pokaz jak wyglada teraz ProductAdd i Product
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 07:48 |