[PHP]Utworzenie obiektu z parametrami |
[PHP]Utworzenie obiektu z parametrami |
12.01.2023, 11:30:49
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 482 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
Cześć,
mam tu taki przykładzik z artykułu z lipca 2022 i nie rozumiem dlaczego autor podał parametry klasy przy tworzeniu obiektu. W artykule nie ma tego wyjaśnione, natomiast Visual Studio Code mówi mi przy tworzeniu obiektu, że klasa nie ma żadnego konstruktora, więc zostanie wywołana bez parametru. Ok, jasne, ale więc dlaczego podano te parametry? klasa:
Wywołanie:
W ogóle kiedy to sie odpali to wywala błąd: Kod Fatal error: Uncaught TypeError: GermanShepherd::getEyeColor(): Return value must be of type string, null returned in C:\xampp\htdocs\index.php:28 Stack trace: #0 C:\xampp\htdocs\index.php(91): GermanShepherd->getEyeColor() #1 {main} thrown in C:\xampp\htdocs\index.php on line 28
Ten post edytował sadistic_son 12.01.2023, 11:34: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! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
12.01.2023, 11:57:02
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6297 Dołączył: 27.12.2004 |
No widac blad autora, pewnie zapomnial o konstruktorze.
Temu tez masz potem blad Fatal error: Uncaught TypeError: GermanShepherd::getEyeColor(): Return value must be of type string, null returned bo probujesz pobrac eyeColor, ktory jeszcze nie zostal okreslony. Jakbys to robil w konstruktorze, co sugeruje kod, to tego bledu bys nie mial po tym komentarzu autora " In the example above, we use the constructor to create a new GermanShepherd with Brown eyes. " Widac, ze zapomnial poprostu dodac konstruktor w artykule choc na koncu artykulu ten konstruktor juz jest public function __construct(string $eye_color, string $dob, string $fur_color) { $this->eye_color = $eye_color; $this->dob = $dob; $this->fur_color = $fur_color; } czytac to konca -------------------- "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:26:49
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 482 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
No i teraz jest to dla mnie jasne skąd te parametry i czemu w takiej kolejności:)
Dziękuję. PS. Ileż ja czasu natraciłem i w łeb zachodziłem co robię źle przez wszelkie błędy, literówki i niedopatrzenia w różnych artykułach i książkach EDIT: Hej, tak się trochę bawię, celem lepszego zrozumienia konceptu i mam pewną zagwozdkę. Przy tak zbudowanej klasie musze podać $a i $b przy tworzeniu obiektu a konstruktor je sam stworzy. Moge więc tworzyć obiekt w taki sposób: W wyniku dostanę 10 10 20 ($a, $b, $wynik). Ale mogę równierz zupełnie pozbyć się konstruktora, wtedy wywołanie będzie wyglądać jak poniżej, a wynik będzie ten sam:
To czy w takim wypadku konstruktor jest niezbędny? Czy mozna z niego zrezygnować i będzie to zgodne ze sztuką? I pytanie w drugą stronę - czy jeśli mam konstruktor to powinienem robić setter/getter aby było zgodnie ze sztuką. Czy to tylko czysty wybór programisty? Ten post edytował sadistic_son 12.01.2023, 12:07:24 -------------------- 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, 09:37:04
Post
#4
|
|
Grupa: Zarejestrowani Postów: 344 Pomógł: 70 Dołączył: 15.07.2014 Ostrzeżenie: (0%) |
Jeżeli parametry a i b mają być niezmienne w całym cyklu życia obiektu, to zostaw konstruktor i wywal settery dla nich.
Metoda `setWynik` nic mi nie mówi, więc musisz zmienić jej nazwę - na np. `calculate`. Po kodzie widać, że dodajesz, więc może lepiej `calculateSum`? Co do gettera dla wyniku - zależy. Jeżeli operacje obliczenia są skomplikowane i czasochłonne, to przypisanie będzie dobrym rozwiązaniem. W innym przypadku, to metoda `calculate` powinna już coś zwracać. Można jeszcze zrobić tak, że `calculate` będzie metodą prywatną, a `getWynik` będzie mieć if w środku i sprawdzać czy `->wynik` nie jest pusty. Aczkolwiek to rozwiązanie łąmie trochę SOLID. Ten post edytował Salvation 13.01.2023, 09:38:55 |
|
|
13.01.2023, 09:38:45
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Nie do końca dobrze jest to zapisane. Brakuje wartości domyślnej dlatego jeżeli wywołasz getter przed setterem to php rzuci błędem "Typed property Test::$wynik must not be accessed before initialization". Ale tak, możesz pozbyć się konstuktora. Czasami stosuje też zapis np Test::fromArray(array $values) który inicjuje hurtem jakieś wartości.
edit: Oczywiście jeśli parametry "mają być niezmienne w całym cyklu życia obiektu" to po to powstało readonly. Ten post edytował viking 13.01.2023, 09:40:34 -------------------- |
|
|
13.01.2023, 09:48:29
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 482 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
Rozumiem. Dzięki za wyjaśnienia.
Tak, rzeczywiście setWynik nie ma sensu bo ona liczy tylko a i b. edit: Oczywiście jeśli parametry "mają być niezmienne w całym cyklu życia obiektu" to po to powstało readonly. to nie lepiej użyć wtedy stałych?-------------------- 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:05:07
Post
#7
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6297 Dołączył: 27.12.2004 |
Stalej nie okreslisz w konstruktorze,
-------------------- "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:42:17
Post
#8
|
|
Grupa: Zarejestrowani Postów: 344 Pomógł: 70 Dołączył: 15.07.2014 Ostrzeżenie: (0%) |
|
|
|
Wersja Lo-Fi | Aktualny czas: 27.04.2024 - 17:47 |