Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Logowanie, zwrot/wypozyczenie ksiazek OOP - mocno początkujący
mrpickles
post 14.10.2019, 18:03:39
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 14.10.2019
Skąd: Białystok

Ostrzeżenie: (0%)
-----


Cześć,
Zaczynam naukę OOP i w napisałem skrypt który umożliwia rejestracje/logowanie/zwrot/wypożyczenie książek.
Mam świadomość istnienia SOLID oraz PSR - czytałem o PSR 1 / 2 i staram się przestrzegać.
Nie znam MVC ani testów np. PHPUnit - to będą kolejne kroki w nauce.

Czy taki skrypt można określić obiektowym, czy jest to jakaś hybryda? Zanim pójdę dalej jw chciałbym nauczyć się dobrych nawyków i w prawidłowy sposób posługiwać się OOP.

Skrypt nie wszedł na forum, umieściłem na githubie

Link do GitHub

Moje dodatkowe pytania:

1. Tworzenie obiektu Database w konstruktorze innych klas, czy jest to prawidłowe?
2. Metoda checkCredentials klasy log - czy nie narusza zasady pojedynczej odpowiedzialności? Czy nie powinna np. wyszukiwać użytkownika,a następnie inna metoda powinna weryfikować dane?

Dzięki za wszystkie uwagi i poświęcony czas smile.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mrpickles
post 17.10.2019, 21:00:47
Post #2





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 14.10.2019
Skąd: Białystok

Ostrzeżenie: (0%)
-----


Tak wiem, błądzę muszę poukładać wiedze.

1. zrobiłem composera i dodałem autoloada z composera - rzeczywiście prościej niż ręcznie, podszkalam się z niego.
2. zrobiłem też php-cs-fixer - muszę tylko rozgryźć diffa bo chwilowo robię podgląd zmian ręcznie na klonie.
3. dałem type hinting
4. chyba zrozumiałem intencje z ifami i rzeczywiście wygląda lepiej, poprawiłem kod w tym zakresie jeszcze w pozostałych miejscach, nie wpadłbym na takie podejście, dzięki.
5. dependency injection wiem o co chodzi, dajemy jako argument konstruktora obiekt klasy, nie pomyślałem, żeby wykorzystać to do zrobienia połączenia z bazą danych, ale co do swojego połączenie w konstruktorze nie byłem przekonany, stad pytałem o to w pierwszym poście. ( nie tylko konstruktora oczywiście, ale generalnie jest konieczne jest dziedziczenie klas i jako argument metody w klasie która dziedziczy damy obiekt rodzica klasy )
6. co do polskiego w bazie wiem, ale obejrzałem się za późno, a nie o bazę w tym projekcie chodziło stąd rozstawiłem
7. zmieniłem komentarze na odpowiednie znaczniki, jeśli chodzi o docblock pisząc output i input masz na myśli meta tagi param i return w dokumentacji?
I w takim razie czy to byłby prawidłowy zapis?
  1. /**
  2.  * checking credentials
  3.  * @param array $argument1 array structure to verify credentials
  4.  * @return bool Return bool if credentials are correct
  5.  */
  6. public function checkCredentials(array $data) :bool
  7. {
  8. $this->connection->query("SELECT * FROM uzytkownicy WHERE nick=:nick");
  9. $this->connection->bind(":nick", $data['nick']);
  10. $this->connection->execute();
  11. if($this->connection->rowCount()==0){
  12. $this->isError=true;
  13. $this->error="Incorect nick or password";
  14. return false;
  15. }
  16. if(!password_verify($data["password"], $this->connection->singleResult()->haslo)){
  17. $this->isError=true;
  18. $this->error="Incorect nick or password";
  19. return false;
  20. }
  21. $this->isLoged=true;
  22. return true;


Wrócę jeszcze z pytaniem ponieważ było poruszone po co jest klasa Database. Czy rzeczywiście jest zbędna i powinienem w niej w konstruktorze tylko tworzyć połączenie?

Dzięki za rady. Dalej będę doszkalał się z coposera i z cs-fixera. Grzebie też pomału w linuxie, jednak miałem problem z localhostem i wyczytałem, że najlepiej w linuxie skorzystać z "kontenerów", jednak to zapowiada się grubszy temat. Przerobie wzorce, potem smarty i pewnie będę dalej coś tworzył.

Jak ktoś ma jeszcze jakieś uwagi to ja bardzo chętnie smile.gif

Nowe pliki pod tym samym linkiem.

Ten post edytował mrpickles 17.10.2019, 21:04:43
Go to the top of the page
+Quote Post

Posty w temacie
- mrpickles   [PHP] Logowanie, zwrot/wypozyczenie ksiazek OOP - mocno początkujący   14.10.2019, 18:03:39
- - viking   Najpierw zastosuj autoloader, potem wyrzuć wszystk...   14.10.2019, 18:38:18
- - ohm   klasa Log jest dość mocno myląca, brak namespace...   14.10.2019, 20:13:08
- - mrpickles   1. Dodałem autoloadera 2. Nie znam smarty ani inne...   15.10.2019, 20:06:49
- - athabus   Niestety trochę błądzisz, ale moim zdaniem to bard...   15.10.2019, 21:03:22
- - mrpickles   Tak wiem, błądzę muszę poukładać wiedze. 1. zrobi...   17.10.2019, 21:00:47
- - viking   Przykładowo ta nieszczęsna klasa database. W przyp...   18.10.2019, 07:24:15
- - mrpickles   Usunąłem vendor/autoload w klasach - pozostałość b...   18.10.2019, 09:39:59
- - athabus   Ogólnie po zmianach wygląda już znacznie lepiej. P...   18.10.2019, 10:02:48
- - viking   https://martinfowler.com/eaaCatalog/ Dlaczego głów...   18.10.2019, 10:03:49
- - nospor   Njapierw klasa dziedziczy po Database class Regist...   18.10.2019, 10:21:30
- - athabus   Jeszcze taka ogólna uwaga odnośnie dziedziczenia. ...   18.10.2019, 10:36:44
- - mrpickles   Ustosunkuje się tylko niektórych elementów, bo dos...   18.10.2019, 11:49:49
|- - nospor   Cytat(mrpickles @ 18.10.2019, 11:49:4...   18.10.2019, 12:15:38
- - athabus   To o czym piszesz to jest częsty błąd w tutorialac...   18.10.2019, 12:14:40
- - mrpickles   Zakręciłem się i pracowałem na klonie, a zrobiłem ...   18.10.2019, 13:12:23
- - nospor   Generalnie nie chodzi o odzielenie php od html a o...   18.10.2019, 13:33:05
- - mrpickles   Ok czyli MVC się kłania. Dzięki za wyjaśnienia, ...   18.10.2019, 13:37:07
- - phpion   Wiele już zostało powiedziane ale ja dodam od sieb...   3.11.2019, 18:59:27
- - mrpickles   Trochę mnie nie było, jednak musiałem przyswoić do...   19.11.2019, 19:34:39
- - nospor   Jest zdecydowanie lepiej. echo View::renderTempl...   20.11.2019, 10:53:34
- - athabus   No prosze a już myślałem, że się poddałeś ;-) Ko...   21.11.2019, 08:36:44
- - mrpickles   Dzięki za uwagi:) 1) Powalczę z gitem - zamiast n...   21.11.2019, 16:45:44
- - athabus   Tak w telegraficzny skrócie, to to co zaproponował...   21.11.2019, 17:19:04
- - viking   Możesz też zmienić podejście i poczytać o https://...   21.11.2019, 18:53:53
- - mrpickles   Utknąłem, nie mam pomysłu, przeglądałem dokumentac...   5.12.2019, 22:28:48
- - athabus   Najprościej chyba możesz to zrobić przechwytując w...   6.12.2019, 21:45:45
- - mrpickles   Zrobiłem tak, że kontroler zwraca Response, a w Ru...   8.12.2019, 20:51:37
- - nospor   Widze nadal kodu nie testujesz FrontController.ph...   7.01.2020, 16:34:45
- - mrpickles   Przez ostatni czas przerabiałem Laravela, teraz wr...   29.02.2020, 14:31:25
- - nospor   Zrozum, rzeczy konfiguracyjne nie moga lezej w GIT...   29.02.2020, 17:49:42
- - mrpickles   Dzięki teraz wiem o co chodzi. Tak używam laravela...   1.03.2020, 00:11:46


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

 



RSS Wersja Lo-Fi Aktualny czas: 28.04.2024 - 00:21