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

Szukam kogoś do pomocy w moim projekcie PHP

Object Storage Arubacloud
+1 głos
378 wizyt
pytanie zadane 6 stycznia 2021 w Nasze projekty przez Anedroid Obywatel (1,530 p.)

Witam. Od dłuższego czasu pracuję nad pewną stroną internetową w PHP, ale ostatnio zdałem sobie sprawę, że zawiesiłem się w jednym punkcie.

Link do projektu: https://github.com/anedroid/magic-cloud

Chcę przez cały czas trzymać się programowania obiektowego, ale moje doświadczenie z nim jest znikome. Wiem tylko, że kod trzeba podzielić na klasy które mają wykonywać niezależnie poszczególne zadania. Szczególnie problematyczne okazało się dla mnie stworzenie obsługi wielu języków. Trochę już o tym napisałem w tym pytaniu.

Poza tym nie ukończyłem nigdy żadnego projektu, choć wydaje mi się, dość dobrze poznałem języki php i JavaScript. Jestem perfekcjonistą, i uważam to za problem. Inni programiści by napisali całą stronę w godzinę - dwie, mi cały dzień zajmuje napisanie jednego modułu. Normalnie powiedziałbym po prostu o tym swoim znajomym, tylko że nikt z nich nie zna się na programowaniu aby mi coś doradzić czy pomóc, a i w internecie niełatwo znaleźć jakieś dobre materiały nt oop, dlatego piszę to tutaj, na tym forum. Proszę, abyście nie ignorowali tego wątku.

Jak w tytule, proszę o pomoc w moim projekcie - czyli o przejrzenie mojego kodu, o profesjonalne porady, co powinienem w nim zmienić i czego się trzymać, aby kod był czytelny, wydajny i elastyczny. Szczegóły dotyczące projektu na priv.

Mam nadzieję, że publiczne proszenie o pomoc nie było złym pomysłem...

1 odpowiedź

+4 głosów
odpowiedź 6 stycznia 2021 przez Arkadiusz Waluk Ekspert (288,330 p.)

Jeśli szukasz kogoś do stałej pomocy/osoby, która będzie pisała z Tobą, to ja nie jestem zainteresowany. Jednak jeśli chodzi o krótkie przejrzenie kodu to mogę dać parę sugestii, które mi się od razu rzucają:

  • Raczej nikt teraz samodzielnie nie tworzy autoloadingu, korzysta się z tego co oferuje Composer przez PSR-4, bo robi to dobrze i wygodnie.
  • Katalogu vendor/ nie umieszcza się w repozytorium. Za to powinny w nim być pliki composer.json i composer.lock. To są zewnętrzne biblioteki, których nie ma sensu tu trzymać. Wystarczą wspomniane pliki, aby dokładnie odtworzyć i zainstalować potrzebne biblioteki.
  • Masz czasem zmienne jak $fp, $i, $lc, $r, $tpl... trochę to mało czytelne, taka zmienna nic nie mówi na pierwszy rzut oka. $tpl to może jeszcze się ktoś odruchowo domyśli, że template, ale reszta podobnych to kiepsko.
  • Nie używaj @. To jest wyciszenie błędów, które będzie Ci tylko przeszkadzało, bo gdy coś się tam zepsuje, to nawet się o tym nie dowiesz. Zamiast tego trzeba ewentualne błędy po prostu obsłużyć (np. złapać wyjątkiem, jakoś zareagować, wyświetlić komunikat, zapisać do logów itd.) i zrobić wcześniej wszystko, aby ich nie powodować.
  • Jak już określasz typy argumentów do metod, to tak samo mógłbyś określać typ zwracany z funkcji, typ właściwości klasy. To nie jest konieczne, kod działa bez tego, a nawet na sporo starszych wersjach PHP nie zadziała, ale generalnie pomaga.
  • Masz jakiś dziwny zapis w pliku CSS. Jak dla mnie nazewnictwo klas w rodzaju __PANEL__ jest kiepskie, do tego jeszcze te wcięcia, wygląda to strasznie nieczytelnie. Jest to jakiś standard/metodyka (może o czymś nie wiem, nie kojarzę) czy własny pomysł?
  • Nie widzę tutaj żadnego routingu, tzn. decyzji po wejściu na jaki adres należy co wykonać. Chyba jeszcze do tego nie dotrałeś.
  • Masz gdzieniegdzie jakieś komentarze, pilnowałbym się z tym. Nie chcę powiedzieć, że komentarze są całkowicie złe, ale pisałbym tylko takie, które mają naprawdę sens i po angielsku. Informacja pokroju, że zmienne są typu bool jest wg mnie zupełnie zbędna, kod powinien być tak napisany, aby to było wiadome.
  • index.php jest w tym samym katalogu co cała reszta kodu, to trochę słabo. To znaczy, że w serwerze www będziesz musiał ustawić ten katalog główny aplikacji na katalog z którego serwer będzie czerpał pliki, a więc np. ktoś będzie mógł przeglądać vendor, ewentualne konfiguracje, tłumaczenia itd. Ja bym wydzielił jeden katalog, np. public i tam umieszczał wszystko, co ma być widoczne publicznie, czyli np. index.php, jakieś pliki css i inne. A reszta trafia katalog wyżej, aby nie była widoczna z serwera. Tym można sobie też poradzić np. przez plik htaccess (gdy serwer to Apache) i ograniczyć dostęp, tylko po co, gdy można to zrobić w taki sposób i od razu sobie to ładnie wydzielić.
  • Twój kod jak dla mnie kiepsko wygląda, tj. nie przestrzega standardu PSR-12 (albo dawniejszego PSR-2). To nie jest obowiązek, ten standard nie jest oficjalny, ale jest w PHP bardzo powszechnie stosowany.

Tak podsumowując, to nie chciałbym Cię jakoś zniechęcić, ale generalnie tak się nie pisze dzisiejszych aplikacji. Oczywiście, znajomość "gołego" programowania obiektowego jest ważna, ale praktycznie każdy większy niż proste podstrony projekt jest teraz pisany z użyciem jakiegoś frameworka. Dzięki temu podstawa aplikacji jest od razu gotowa, nie wymyślasz wszystkiego od nowa, bo to przeważnie wygląda podobnie i potrzeba tylko konfiguracji. Nie myślałbyś o tym jak chociażby zrobić tłumaczenia, bo od razu taki podstawowy mechanizm dostaniesz. Z resztą framework w pewnym sensie wymusi na Tobie określone użycie obiektowości. I tak można do tego w różny sposób podejść, ale pewne rzeczy narzuci. W PHP najbardziej na topie są obecnie Laravel i Symfony.

Bycie perfekcjonistą może być problematyczne, bo często nie jesteśmy w stanie dojść do perfekcji i tylko zbędnie o tym myślimy. Sam mam coś podobnego. Z resztą często ta perfekcja nie ma w danym przypadku sensu, za dużo czasu się marnuje od razu, aby coś było super, zamiast to coś najpierw zrobić i w ogóle zobaczyć np. czy projekt pójdzie. Nie chcę też oczywiście powiedzieć, aby wszystko robić byle jak, ale trzeba się starać być perfekcyjnym z umiarem :)

1
komentarz 24 stycznia 2021 przez Arkadiusz Waluk Ekspert (288,330 p.)

Niemal wszystko się dzieje automatycznie, nie trzeba nawet pisać index.php, tylko jakąś klasę Controller\LuckyController 

Z tym wszystko to bym nie przesadzał, jeśli robisz po prostu standardowe elementy, które mają już przygotowaną obsługę to idzie szybko, ale taki w końcu sens frameworka. To nie jest "jakaś klasa LuckyController" tylko klasa kontrolera. Kontroler z założenia odpowiada za określone rzeczy i wypadałoby tak bardzo ogólnie wiedzieć po co on jest, poza tym nazwy są oczywiście dowolne, to tylko przykład co podałeś.

nie wiem, czy to co programuję nie jest przesyłane gdzieś dalej (tak zwane "dane diagnostyczne")

Kod Symfony jest publicznie dostępny na GitHubie, możesz sobie przeanalizować każdą jedną linijkę i ocenić co tam się dzieje.

na stronie końcowej wyświetla mi się na dole jakiś pasek do debugowania którego w ogóle nie wstawiałem

To tylko profiler, bardzo wygodne narzędzie dające podgląd na wiele informacji takich typowo deweloperskich/do debugowania. Możesz go wyłączyć jeśli nie potrzebujesz https://symfony.com/doc/current/profiler.html Poza tym nawet jeśli go zostawisz, to nie włączy się na środowisku produkcyjnym, jest tylko do pomocy przy pisaniu.

strona wczytuje się znacznie dłużej niż dotychczas. To pewnie frameworki odpowiadają za tak długo wczytujące się strony w internecie bo muszą za każdym razem wczytać te setki skryptów

Jeśli strona długo Ci się wczytuje to masz coś źle skonfigurowane w środowisku czy słabo napisane w kodzie. Chyba, że czas oczekiwana liczysz w milisekundach i tam coś trochę wzrosło, ale o ile nie robisz aplikacji na gigantyczną skalę to zwracanie na to uwagi ma średnio sens.

w tytule pisze jakiś błąd. Mianowicie "syntax error, unexcepted 'Routing'

Tylko w tytule strony, a nie na stronie normalnie? To trochę dziwne. Błędy się zdarzają, trzeba sprawdzić kod i naprawić.

mimo tego że Symfony jest ogromnym frameworkiem, każdą drobną funkcję trzeba doinstalować jako dodatek: anotation i ten twig.

Ja wiem czy takim ogromnym, wśród tych "pełnych" raczej dość normalnym. Jak weźmiesz jakiegoś np. Slima no to wiadomo, że będzie mniejszy, ale też mniej rzeczy będzie można w nim zrobić i finalnie nadal będzie trzeba doinstalować albo więcej paczek albo pisać wszystko samemu, czego frameworki mają pomóc uniknąć. Zależy co się robi jeszcze oczywiście, trzeba dobierać narzędzia do potrzeb. Symfony ma dwie wersje, można przy instalacji wybrać pełną ze wszystkimi dodatkami lub mniejszą bez nich i wtedy można wybrane doinstalowywać, jak powiedziałeś - https://symfony.com/doc/current/setup.html#creating-symfony-applications

Choć to oczywiście niezwiązane z samym frameworkiem tylko jakimiś modułami php, ale irytujące gdy się odpala composer lub inne programy.

No faktycznie, wygląda jakby xdebug był ładowany gdzieś dwa razy i później nie mógł załadować jeszcze innych rzeczy.

Ogólnie jestem nieco rozczarowany Symfony i przytłoczony tym wszystkim co się dzieje w tle. Zwykłe Hello, world! jest bardzo skomplikowane, a pisząc je od razu poczułem jakbym wrócił do Windowsa i był pod kontrolą Microsoftu, jakbym nie był programistą tylko konsumentem który korzysta z usług firmy

Cóż, może musisz zmienić nastawienie? Nikt tu niczego nie kontroluje, masz pełną dowolność w robieniu czego chcesz, ale no wiadomo że jeśli bierzesz jakieś narzędzie i chcesz go użyć, to trzeba się zastosować do pewnych zasad, aby to się udało zrobić. Tak jest ze wszystkim, pisząc w "gołym" PHP też dostosowujesz się do określonych zasad i mechanizmów, które ono narzuca, aby coś zadziałało.

widzę tyle różnych dziwnych katalogów i plików: migrations, tests, translations, var, packages, routes, .env, .env.test, phpunit.xml.dist, klasy Controller, Entity, Repository, Kernel

Każdy z tych plików i katalogów jest do czegoś, nie jest dziwny jeśli się zrozumie jego rolę. Oczywiście można polemizować czy akurat takie rozwiązanie ma sens czy może powinno coś być zrobione inaczej, ale najpierw wypadałoby wiedzieć jaka jest tego rola, co to daje, dlaczego akurat tak itd. Bo zapewniam, że to nie jest zrobione na złość, aby innym było trudno, tylko jest zrobione, aby było łatwiej i nie wymyślałem tego ja ani inna przypadkowa osoba, której coś się zdaje, tylko cała masa ludzi, którzy biorą jakiś tam udział w rozwoju danego projektu, korzystają z tego i mają jakieś doświadczenie. Sporo rzeczy można też sobie dostosować, zmienić, nawet jeśli domyślnie są zrobione w jakiś inny sposób. Zerknij do dokumentacji i internetu, aby dowiedzieć się po co to jest, ewentualnie zapytaj np. na forum jak będziesz miał problem aby znaleźć.

Prawdopodobnie rozwiązują dziesiątki różnych problemów, ale ja nigdy ich nie napotkałem a chyba powinienem żeby mieć powód do używania tego frameworka.

Niekoniecznie. Wydaje mi się, że już trochę napotkałeś, bo stąd pojawiło się to pytanie i te wiele wątpliwości dotyczące różnych kwestii. Nawet jeśli nie, to zawsze możesz zacząć go używać zanim spotkasz te dziesiątki problemów, aby po prostu ich uniknąć i już się nad nimi nie zastanawiać.

Podsumowując, nie wiem czy jest sens żebym zmusił się do kontynuacji nauki. Może jak przebrnę pierwszych kilka rozdziałów to wszystko się rozjaśni? A może jeszcze bardziej mnie to odepchnie?

Jeśli się do czegoś zmuszamy, to rzadko kiedy to idzie dobrze i ma sens, wg mnie. Nie mogę Ci jednak jednoznacznie powiedzieć co masz zrobić, bo na jakiej podstawie miałbym to robić. W mojej opinii frameworki to teraz niezbędne narzędzie pracy przy większości rzeczy. Jak mówiłem, narzędzie trzeba dobierać to potrzeb, więc pewnie nie zawsze, ale często tak. Nikomu się nie chce pisać dziesiątek razy tego samego, gdy można po prostu użyć już znanego i sprawdzonego rozwiązania, które da to wszystko szybciej. Praca jest szybsza, łatwiej wdrożyć do kodu inne osoby, dzięki temu jest to też tańsze. Z pewnością im dalej będziesz, tym więcej powinno być jasne - tak działa uczenie się, że na początku czegoś nie wiemy/rozumiemy, a z czasem jest coraz lepiej. Czy jeszcze bardziej odepchnie tego nie wiem, nie znam Ciebie, tego jak Ci idzie nauka. Z tej krótkiej rozmowy mam wrażenie (może mylne, ciężko tak ocenić), że podchodzisz do frameworków negatywnie i niechętnie. Jeśli tak jest, to może faktycznie nie ma to sensu i ciężko będzie coś zrobić, gdy z góry się przyjmie, że to jest złe.

Czy wszystkie frameworki są takie, czy tylko ten jeden? Kompletnie się pogubiłem w tych wszystkich technologiach które miały mi przecież ułatwić życie. Spróbuję jeszcze Laravel i CodeIgniter, może one mają trochę niższy próg wejścia i łatwiej mi się będzie zaadaptować.

Dwa topowe to są obecnie Symfony i Laravel. Wspominałem wyżej np. Slima, on jest całościowo mniejszy, więc można też założyć, że będzie prostszy. Tyle że jednocześnie od razu będziesz musiał zacząć kombinować jak zrobić coś, co w innych frameworkach jest do rozwiązania od ręki. Jest też mniej popularny i ogólnie mniej spotykany, więc ciężej może być np. uzyskać pomoc. Laravel w mojej opinii ma odrobinę niższy próg wejścia, ale tam tak jakby jeszcze więcej rzeczy dzieje się samo, ma więcej "magii". Poza tym odniosłem wrażenie (mogę się znów mylić), że Ty za bardzo w to Symfony nie wszedłeś - nie wiesz co to za katalogi tam są i po co (nawet bardzo ogólnie), mówisz o jakiejś klasie jako kontrolerze i że zrobienie samego hello world jest trudne. W takim przypadku, odpowiadając na Twoje pytanie, można powiedzieć, że tak, wszystkie frameworki są takie. Robi się różne rzeczy w różny sposób, ale każdy framework określone rzeczy trochę narzuca, aby to mogło zadziałać i trzeba pewne rzeczy zrozumieć, aby to się udało zrobić.

komentarz 24 stycznia 2021 przez Anedroid Obywatel (1,530 p.)
edycja 24 stycznia 2021 przez Anedroid

Dzięki za wyjaśnienia. A propos błędów na konsoli, przejrzałem tą konfigurację php.ini i zauważyłem, że pierwszy błąd znika jeżeli usunie się wpis:

zend_extension="xdebug.so"

[xdebug]
; Path for the library in the extensions folder
; zend_extension="xdebug.so"

; Enable communications using DBGp protocol
xdebug.remote_enable=1

; Automatically start a debugging session?
xdebug.remote_autostart=1

; Host on which the IDE will run. Useful when using Docker
xdebug.remote_host=127.0.0.1

; The port to use for DBGp. Default is 9000
xdebug.remote_port=9000

; Show stacktraces?
xdebug.default_enable=1

Okazało się, że to ustawienie dublowało się z ustawieniem w innym pliku:

zend_extension=xdebug.so

To jest cała zawartość pliku. Nie mam pojęcia po co to jest tak zrobione. Pozostałe 2 błędy nie zniknęły, ale są to jedyne aktywne rozszerzenia, więc przyczyna błędu musi być gdzie indziej.

;extension=bz2
;extension=curl
;extension=ffi
;extension=ftp
;extension=fileinfo
;extension=gd2
;extension=gettext
;extension=gmp
;extension=intl
;extension=imap
;extension=ldap
;extension=mbstring
;extension=exif      ; Must be after mbstring as it depends on it
extension=mysqli
;extension=oci8_12c  ; Use with Oracle Database 12c Instant Client
;extension=odbc
;extension=openssl
;extension=pdo_firebird
extension=pdo_mysql
;extension=pdo_oci
;extension=pdo_odbc
;extension=pdo_pgsql
;extension=pdo_sqlite
;extension=pgsql
;extension=shmop

; The MIBS data available in the PHP distribution must be installed.
; See http://www.php.net/manual/en/snmp.installation.php
;extension=snmp

;extension=soap
;extension=sockets
;extension=sodium
;extension=sqlite3
;extension=tidy
;extension=xmlrpc
;extension=xsl

Mimo wszystko xdebug w vs code jakoś działa.

Jak to zrobię, to będę miał jeden problem mniej.

Edit: już rozkminiłem, nie muszą być te moduły włączone w php.ini, bo mysqli i tak bez tego działa. Po prostu to samo jest w innych plikach w katalogu mods-available.

komentarz 24 stycznia 2021 przez Arkadiusz Waluk Ekspert (288,330 p.)
A masz zainstalowane paczki do tego? Spróbuj apt install php7.4-mysql (lub inaczej w zależności od distro). Prawdopodobnie przy instalacji paczek automatycznie tworzą się potrzebne konfiguracje w mods-available, więc być może zaznaczone powyżej linie w samym php.ini też trzeba będzie wyrzucić/zakomentować, bo znów będzie że coś jest ładowane wiele razy.
1
komentarz 24 stycznia 2021 przez Anedroid Obywatel (1,530 p.)
Tak, teraz to wygląda o wiele lepiej. Widocznie jak kiedyś próbowałem instalować mysql to odkomentowałem to bo myślałem że dzięki temu będzie działał a potem zapomniałem o tym.
1
komentarz 24 stycznia 2021 przez Anedroid Obywatel (1,530 p.)

Tylko w tytule strony, a nie na stronie normalnie? To trochę dziwne. Błędy się zdarzają, trzeba sprawdzić kod i naprawić.

To chyba błąd Firefoxa która cache-uje tytuły stron, jak przed chwilą zaobserwowałem. Wtedy najpierw wyświetlał się błąd na stronie i w tytule, a jak poprawiłem to informacja zniknęła a tytuł został.

Podobne pytania

+4 głosów
1 odpowiedź 414 wizyt
pytanie zadane 20 grudnia 2015 w Nasze projekty przez Albert221 Obywatel (1,980 p.)
+1 głos
3 odpowiedzi 418 wizyt
pytanie zadane 25 października 2017 w PHP przez `Krzychuu Stary wyjadacz (13,940 p.)
–4 głosów
1 odpowiedź 307 wizyt
pytanie zadane 3 października 2017 w Ogłoszenia, zlecenia przez Mistrz0000000 Bywalec (2,780 p.)

92,690 zapytań

141,603 odpowiedzi

320,099 komentarzy

62,050 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

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!

...