[PHP]MySQL setters i getters |
[PHP]MySQL setters i getters |
12.01.2023, 15:21:31
Post
#21
|
|
Grupa: Zarejestrowani Postów: 1 489 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
Product:
Oraz ProductAdd:
Przyczepia się że nie wie co to jest: $sku = $this->sku; $productName = $this->productName; $price = $this->price; $selectedType = $this->productType; Jak w product zmienię na public to za to przyczepia się że Product::$sku must not be accessed before initialization Ten post edytował sadistic_son 12.01.2023, 15:26:52 -------------------- 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! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
12.01.2023, 15:25:20
Post
#22
|
|
Grupa: Moderatorzy Postów: 36 477 Pomógł: 6301 Dołączył: 27.12.2004 |
zmien
private string $productName; na protected string $productName; poniewaz dziedziczysz analogicnzie reszta pol No i odkomentuj ten parent:: public function __construct(DB $db){ $this->db = $db; parent::__construct(); }
Powód edycji: [nospor]:
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
12.01.2023, 15:29:47
Post
#23
|
|
Grupa: Zarejestrowani Postów: 1 489 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
Niestety to samo co wczesniej -Fatal error: Uncaught TypeError: Cannot assign null to property Product::$productName of type string in
Jak tylko wejdę na stronę to konstruktor ProductAdd próbuje przypisać $_POST które nie zostało wysłane
-------------------- 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! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
12.01.2023, 15:32:11
Post
#24
|
|
Grupa: Moderatorzy Postów: 36 477 Pomógł: 6301 Dołączył: 27.12.2004 |
Cannot assign null to property Product::$productName of type string in
No bo pola sa ustawione jako teksty czy liczby a ty przypisujesz null. No komunikat mowi to wyraznie. Nie bardzo ogarniam czemu tworzysz produkt jesli POST nie byl wyslany.Znaczy wiem czemu, wszystko przez ten balagan. No ale dobra, nie ustawiaj nullow tylko to co ma byc czyli $this->productName = isset($_POST['name']) ? (string) $_POST['name'] : ''; $this->sku = isset($_POST['sku']) ? (string) $_POST['sku'] : ''; $this->price = isset($_POST['price']) ? (float) $_POST['price'] : 0; $this->productType = isset($_POST['productType']) ? (string) $_POST['productType'] : ''; -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
12.01.2023, 15:56:05
Post
#25
|
|
Grupa: Zarejestrowani Postów: 1 489 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
No tak, przypisywałem null do stringa, to jasne że się nie da.
Uff, dobra, to chociaż jestem na etapie, że funkcjonalności działają. Dziękuję. No to dalsze poprawianie przede mną, żeby z tego chaosu wyłoniła się jakaś struktura. Powiedz mi prosze do czego właściwie klasa Product ma służyć? Ja mam nią tylko i wyłacznie (po zrobieniu setter/getter) pobierać i wyświetlać właściwości produktu tam gdzie jest to potrzbne? Np na szybko (bo robię obiad jedną ręką): i potem jak chcę spradzić np czy jest wysłane formularzem $_POST['name'] to: no własnie i co teraz? Brakuje mi tego logicznego zastosowania dla tej klasy. Właściwie to przyznać można że cała ta moja aplikacja to nie zupełnie OOP, tylko po prostu uzycie metod klas jak w programowaniu proceduralnym, tak sądzę. Ten post edytował sadistic_son 12.01.2023, 15:56:33 -------------------- 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! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
12.01.2023, 16:01:51
Post
#26
|
|
Grupa: Moderatorzy Postów: 36 477 Pomógł: 6301 Dołączył: 27.12.2004 |
Klase Produkt zostala ci zaproponowana wczesniej jako DTO.
Wiec klasa Produkt jest po to, bys mial ladno klase do przechowywania nazwy produkt, ceny itp. Juz ci pisalem wczesniej wiele razy. ProduktAdd nie moze dziedziczyc po Produkt, tylko ma otrzymac produkt tam gdzie trzeba czyli np public function insertNewProduct(Product $product) A gdzie tam w odmentach swojego kodu, gdize wywolujesz insertNewProduct, masz ten product stworzyc czyli $product = new Product(); if(isset$_POST['save']) && isset($_POST['name'])){ $product->setName($_POST['name']); } ..... .....->nsertNewProduct($product); -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
12.01.2023, 16:05:54
Post
#27
|
|
Grupa: Zarejestrowani Postów: 1 489 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
Ok, zaczynam chwytać. Nigdzie w żadnych artykułach nie natrafiłem na takie proste pokazanie jak łaczyć znane mi proceduralne programowanie z OOP.
Dobra, a czy klasa nadrzędna w moim wypadku PageDisplay może mieć switch który centralnie robi Czy to jest po bożemu, albo chociaż akceptowalne (skoro to przyszły junior pisze)? -------------------- 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! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
12.01.2023, 16:08:24
Post
#28
|
|
Grupa: Moderatorzy Postów: 36 477 Pomógł: 6301 Dołączył: 27.12.2004 |
Na te chwile moze.
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
12.01.2023, 16:11:43
Post
#29
|
|
Grupa: Zarejestrowani Postów: 1 489 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
ok.
To klasa Product nie ma mieć właściwie żadnych iinych metod oprócz setterów i getterów, tak? Skoro np walidacja czy dane $_POST są wypełnione ma być gdzie indziej. Ten post edytował sadistic_son 12.01.2023, 16:13:37 -------------------- 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! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
12.01.2023, 16:14:00
Post
#30
|
|
Grupa: Moderatorzy Postów: 36 477 Pomógł: 6301 Dołączył: 27.12.2004 |
tak
I jesli to juz bedzie oddzielna klasa i ProductAdd po nei nie bedzie dziedziczyl, to zamien spowrotem protected na private -------------------- "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, 09:59:43
Post
#31
|
|
Grupa: Zarejestrowani Postów: 1 489 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
Ok, to to mi sporo wyjaśnia. Tego elementu mi chyba brakowało, żeby moc w ogóle zacząć porządkowanie tego chaosu. Dziękuję.
Hej, jakiego typu będa zmienne $dbh, $smt, $param i $value?
dbh to object, tak? A co z $value która raz może być int, raz string itd? Jak mam ją typować w deklaracji metody bind ? Oraz jaki typ danych zwrócą mi tutaj poszczególne metody? Ten post edytował sadistic_son 13.01.2023, 10:00: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! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
13.01.2023, 10:04:00
Post
#32
|
|
Grupa: Moderatorzy Postów: 36 477 Pomógł: 6301 Dołączył: 27.12.2004 |
No obiekt, ale konkretnie obiekt PDO wiec
private \PDO $dbh; Na takiej samej zasadzie jak ci typowalem wczoraj DB ale znowy nie laczysz kropek Co do value to albo mixed albo union https://www.php.net/manual/en/language.types.mixed.php No a $param to przeciez string -------------------- "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, 10:15:34
Post
#33
|
|
Grupa: Zarejestrowani Postów: 1 489 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
Na takiej samej zasadzie jak ci typowalem wczoraj DB ale znowy nie laczysz kropek Ja już nie jestem młodym 30 parolatkiem, więc mam nieco utrudniony kontakt z bazą Zwłaszcza to zauważyłem po covidzie rok temu (serio) i nie chce minąć. chyba już tak zostanie na stałe a $type to też będzie string? a $stmt ? A taka funkcja jak poniżej, która nic nie zwraca, to powinna być :void ?
Albo tutaj: Co to mi zwraca? Object? Czyli jak powinna wyglądać pierwsza linijka?
Ten post edytował sadistic_son 13.01.2023, 10:16:17 -------------------- 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, 10:20:17
Post
#34
|
|
Grupa: Moderatorzy Postów: 36 477 Pomógł: 6301 Dołączył: 27.12.2004 |
Starasz sie o te nowa robote, ona wymaga samodzielnosci. Ok, na poczatku mozna o cos pytac, ale latanie z pierdulami to naprawde za dlugo miejsca tam nie zagrzejesz nawet jako junior
Jkaim cudem $type to jest string? przeciez do $type przypisujesz $type = \PDO::PARAM_INT; Wiec idziesz do manuala PHP i patrzysz czym jest \PDO::PARAM_INT i juz wiesz jakiego typu bedzie $type Tak, jak funkcja nic nie zwraca to void return $this->stmt->fetchAll(\PDO::FETCH_ASSOC); No to samo tutaj. Co ci zwraca fetchAll() ? Obiekt? Naprawde? Bo ja wchodze do manuala i widze ze wraca jednak co innego -------------------- "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, 10:20:55
Post
#35
|
|
Grupa: Zarejestrowani Postów: 6 366 Pomógł: 1115 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Poczytaj sobie https://prophp.pl/advice/show/14/jak_czytac...mentacje_php%3F
Masz np https://www.php.net/manual/en/pdostatement.fetchall.php Więc co zwraca public PDOStatement::fetchAll(int $mode = PDO::FETCH_DEFAULT): array ? -------------------- |
|
|
13.01.2023, 10:33:15
Post
#36
|
|
Grupa: Zarejestrowani Postów: 1 489 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
Jkaim cudem $type to jest string? Tak, wewnątrz metody przypisuję rózne wartości. Ale przecież wywołując metodę bind podaję parametry w formie $this->db->bind(':sku', $sku); więc w tym przypadku $type na wejściu będzie null. Innym razem mogę go podać i wtedy będzie stringiem, tak? Czyli powinno być public function bind(string $param, mixed $value, mixed $type = null) . Czy jednak błądzę? przeciez do $type przypisujesz $type = \PDO::PARAM_INT; Widzę w manualu że w takim przypadku $type = \PDO::PARAM_INT; to type to "PDO::PARAM_INT (int) Represents the SQL INTEGER data type.". Jednak moje pytanie dotyczyło typu wejściowego, byłem nieprecyzyjny. return $this->stmt->fetchAll(\PDO::FETCH_ASSOC); No to samo tutaj. Co ci zwraca fetchAll() ? Obiekt? Naprawde? Bo ja wchodze do manuala i widze ze wraca jednak co innego Masz np https://www.php.net/manual/en/pdostatement.fetchall.php No ok, ok, to będzie array.
Więc co zwraca public PDOStatement::fetchAll(int $mode = PDO::FETCH_DEFAULT): array ? Ten post edytował sadistic_son 13.01.2023, 10:34:57 -------------------- 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, 10:44:30
Post
#37
|
|
Grupa: Moderatorzy Postów: 36 477 Pomógł: 6301 Dołączył: 27.12.2004 |
$this->db->bind(':sku', $sku);
Troche sie zgubilem. Co ma sku do $type danych ktore bindujesz? -------------------- "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, 10:49:29
Post
#38
|
|
Grupa: Zarejestrowani Postów: 1 489 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
To z sku to tylko przykład wywołania metody bind.
W definicji mam:
A wywołuje ją np w taki sposób (tutaj nie podając $type w parametrze):
Stąd moje pytanie jaki typ danych będzie mieć $type w definicji metody bind (na wejściu), skoro raz jest na wejściu null (jak powyżej), innym razem mogę mu podać PARAM_INT. Wg mnie na wejściu będzie to mixed. public function bind(string $param, mixed $value, mixed $type = null) Tak? Ten post edytował sadistic_son 13.01.2023, 10:50:50 -------------------- 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, 10:51:44
Post
#39
|
|
Grupa: Moderatorzy Postów: 36 477 Pomógł: 6301 Dołączył: 27.12.2004 |
W przykladach tutaj co podales zawsze jest NULL. Ale type to type od PDO a ten zawsze jest INT. Wiec twoj $type moze byc nullem albo INTem wiec
public function bind(string $param, mixed $value, ?int $type = null) znak zapytania mowi, ze cos moze byc NULL -------------------- "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, 10:59:04
Post
#40
|
|
Grupa: Zarejestrowani Postów: 1 489 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
O, i teraz się zrozumieliśmy. Dzięki za odpowiedź
Nastepne pytanie, jeśli mogę. Zabrałem się za naprawę klasy Product oraz usunięcie jej dziedziczenia np z ProductAdd. W Product pozbyłem się konstruktora aby posługiwać się setterami i getterami. Wygląda ona teraz tak (kawałek):
Teraz chcę się posłużyć tą klasą. Gdy miałem konstruktor to było jasne dla mnie: To działało. Teraz natomiast pozbyłem się konstruktora i porobiłem settery i gettery i zastanawiam się jak powinno wyglądac wywołanie metody insertNewProduct przy użyciu Product. No i deklaracja metody:
EDIT: Tzn, że to działa to wiem. Moje pytanie to - czy robię to zgodnie ze sztuką, lub chociaż niedaleko jej. Ten post edytował sadistic_son 13.01.2023, 11:07:11 -------------------- 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: 8.06.2024 - 09:34 |