• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak powinna wyglądać klasa w php?

Object Storage Arubacloud
+2 głosów
287 wizyt
pytanie zadane 13 grudnia 2020 w PHP przez Anedroid Obywatel (1,530 p.)

Witam. Jestem dosyć początkujący w kwestii programowania obiektowego, tzn. wiem mniej-więcej jak działają poszczególne mechanizmy, ale nie znam często stosowanych praktyk lub błędów których należy unikać. Bardzo zależy mi na czytelności, wydajności i elastyczności kodu ale często trudno jest mi to osiągnąć.

Stworzyłem sobie taką prostą klasę Locale, która ma wykonywać wszelkie zadania związane z lokalizacją strony: stworzyć listę alternatywną języków na podstawie: zmiennej $lc z innej klasy która oznacza bezpośredni wybór języka przez użytkownika, języków w nagłówku http wysłanym przez przeglądarkę i język angielski na końcu listy. Następnie klasa wybiera pierwszy dostępny język z tej listy z użyciem pętli po nazwach plików i w takim języku wyświetla stronę.

Drugim zadaniem klasy Locale jest wyświetlenie listy języków do wyboru podzielonej na dwie grupy (oczywiście generowaniem html zajmuje się inna klasa): sugerowane i pozostałe. Sugerowane to te języki z listy alternatywnej, oprócz domyślnego angielskiego, a pozostałe to te które nie znalazły się w grupie sugerowanych ale są również dostępne dla danej podstrony. Na całej liście muszą się znaleźć wszystkie dostępne języki i nie może się znaleźć taki który jest niedostępny.

Moim problemem nie jest stworzenie działającej klasy która będzie spełniać oba te zadania, ale optymalizacja kodu i jego uporządkowanie. Nie wiem:

  • jakie nazwy nadać stałym, zmiennym i funkcjom aby były wystarczająco czytelne,
  • jak optymalnie podzielić zadania między funkcje klasy,
  • jak zminimalizować liczbę użytych pętli aby zapewnić maksymalną wydajność strony,
  • jak poradzić sobie z obsługą błędów,
  • przekazywać dane do obiektu w formie argumentów funkcji czy deklaracji zmiennych (np. $lang->prefferences = ["pl"];)?

Niezbyt sobie również radzę z komentowaniem kodu i nieco się w nim gubię. Jeżeli jest to ważna informacja, to korzystam z frameworka Smarty.

komentarz 13 grudnia 2020 przez Anedroid Obywatel (1,530 p.)
I jeszcze jedno: jak często publikować zmiany w Githubie (git commit), oraz jak je opisywać?

1 odpowiedź

+4 głosów
odpowiedź 13 grudnia 2020 przez Comandeer Guru (602,380 p.)

Co do nazewnictwa: https://www.php-fig.org/psr/psr-12/

jak optymalnie podzielić zadania między funkcje klasy

Nie ma jakiejś jednej, złotej zasady. Po prostu wypada dzielić zadania tak, żeby każda metoda wykonywała jedną rzecz. Zresztą podobną zasadą powinno się kierować przy tworzeniu klas, więc jeśli zakładasz, że Twoja klasa ma robić dwie rzeczy, to prawdopodobnie jest tutaj miejsce do podziału na dwie klasy.

 jak zminimalizować liczbę użytych pętli aby zapewnić maksymalną wydajność strony,

Trudno cokolwiek powiedzieć, nie widząc kodu. Niemniej brzmi jak przedwczesna optymalizacja. Na razie bym się tym nie martwił.

 jak poradzić sobie z obsługą błędów

Klasa w razie problemów powinna rzucić wyjątkiem – tyle. Jak to zostanie obsłużone przez resztę systemu, to już zupełnie odrębny problem.

przekazywać dane do obiektu w formie argumentów funkcji czy deklaracji zmiennych (np. $lang->prefferences = ["pl"];)

Pytanie brzmi, czy te dane potrzebne są całej klasie, czy tylko tej metodzie? Ogólnie jako własności powinny być te dane, które stanowią tzw. stan klasy (np. aktualnie wybrany język), natomiast wszystko to, czego potrzebują metody do pracy powinno iść jako parametry metod. 

komentarz 13 grudnia 2020 przez Anedroid Obywatel (1,530 p.)
edycja 13 grudnia 2020 przez Anedroid

jeśli zakładasz, że Twoja klasa ma robić dwie rzeczy, to prawdopodobnie jest tutaj miejsce do podziału na dwie klasy.

2 zadania, ale oba związane z lokalizacją. Trochę trudno mi jest sobie wyobrazić dzielenie tego na 2 klasy, w końcu oba te zadania są ze sobą silnie powiązane i korzystają ze wspólnych zmiennych.

Trudno cokolwiek powiedzieć, nie widząc kodu. Niemniej brzmi jak przedwczesna optymalizacja. Na razie bym się tym nie martwił.

Tutaj masz link do Github: https://github.com/anedroid/magic-cloud/blob/master/classes/MagicCloud/Locale.php.

Trudno cokolwiek powiedzieć, nie widząc kodu. Niemniej brzmi jak przedwczesna optymalizacja. Na razie bym się tym nie martwił.

Czyli mam najpierw napisać byle jaki kod żeby działał, a potem go poprawiać i optymalizować?

komentarz 13 grudnia 2020 przez Comandeer Guru (602,380 p.)

Czyli mam najpierw napisać byle jaki kod żeby działał, a potem go poprawiać i optymalizować?

Tak.

A co do kodu, tak szczerze to ja bym tam widział nawet trzy klasy:

  • od parsowania języka z nagłówka HTTP (swoją drogą, źle go parsujesz; zwróć uwagę, że każdy język dostaje tzw. wagę i jeśli jest ona równa "0", to oznacza, że nie chcę danego języka – nie sprawdzasz tego);
  • od wyszukiwania dostępnych pakietów języków;
  • od łączenia tych obu klas i wystawiania prostego API.

Podobne pytania

+1 głos
1 odpowiedź 492 wizyt
pytanie zadane 9 grudnia 2017 w C i C++ przez Marcin_N_97 Stary wyjadacz (10,290 p.)
0 głosów
1 odpowiedź 1,128 wizyt
pytanie zadane 6 czerwca 2017 w PHP przez To Ja Początkujący (490 p.)
0 głosów
1 odpowiedź 529 wizyt
pytanie zadane 31 lipca 2018 w PHP przez Adam Ostrogórski Obywatel (1,070 p.)

92,654 zapytań

141,543 odpowiedzi

319,955 komentarzy

62,023 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...