Wpis z mikrobloga

Do tej pory wszystkie moje projekty robiłem proceduralnie, #oop uczę się sam.
Ostatnio dłubię sobie co nieco w obiektowym PHP i zrobiłem sobie na próbę taki oto projekt:

https://github.com/Moris299/SimplePHPWeather

Mirki, mogę prosić o wytknięcie mi błędów? Ogólnie o ocenę mojego kodu?
Chciałbym w przyszłości zrobić coś większego, ale chcę na próbę zrobić coś małego, żeby wiedzieć gdzie muszę się poprawić ( ͡° ͜ʖ ͡°)
Z góry dziękuję () #php #webdev
  • 9
@Moris299 zamiast define dobrym pomysłem będzie const.
Metody if coś zwróć coś lepiej zapisz
Return warunek? coś:lubcos;
Bądź po prostu
if coś return coś
Return coś
(Return zakańcza wykonanie metody więc nie trzeba else)
Nazwa pliku powinna być taka sama co klasy
@Moris299: jak na początki OOP całkiem spoko. Zdecydowanie wszystkie (aktualne) PSRy, które definiują wygląd kodu i jego porządek - od takich drobnostek jak zapis nazw klas i funkcji po ciekawostki typu autoloader. Pomyśl też o komentarzach PHPDoc.
Maurycy,

https://www.php-fig.org/psr/psr-2/ - na początek
Nie trzymaj żadnych api kluczy w pliku .txt, bo taki plik jest zwykle dostępny na serwerze po prostu po url i wyświetli całą zawartość każdemu chętnemu. Zresztą narzucanie gdzie ktoś ma trzymać api klucz jest bez sensu.
Żadnych define, globalnych zmiennych itd. zresztą są one tutaj zbędne, ktoś żeby zcustomizować Twoją klasę musi ją skopiować i zmienić wartość w define.
Po to robisz klasę żeby ktoś mógł
@Moris299: Jedna klasa to jeszcze nie OOP. Póki co ledwie uczysz się składni. ;-)

Tak czy inaczej ponadto do tego co napisali inni wcześniej:

Jedna klasa = jeden plik. Jeden plik = jedna klasa i nic więcej(!). Przenieś klasę do innego pliku, a w pliku wejściowym (index.php na przykład) odnoś się do niej "z zewnątrz".

Nie używaj zmiennych globalnych w klasach. Przekazuj wartości przez parametry. Od razu na przyszłość mówię, że
@Moris299: oprócz tego co koledzy wyżej napisali:
- nazwa klasy jest myląca - City - obstawiałbym że to klasa do tworzenia obiektu miasta. Może daj CityWeatherLoader
- nazwy metod, zmiennych, słów kluczowych - zastosuj się do PSR
- zamiast pakować parametry typu $disp = false rozdzieliłbym klasę która pobiera dane i wystawia je na swoim interfejsie od wszelkiej dekoracji. Osobno bym zrobił dekoratory dla tej klasy. Np. CityWeather od pobierania. ImperialCityWeather