Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne][PHP]Jak sprawnie i szybko wykonać analizę kodu PHP?
Forum PHP.pl > Forum > Przedszkole
Malinaa
Mam pytanie jak w temacie.

Jak sprawnie i szybko wykonać code review czyli analizę kodu PHP?
vokiel
Masz na myśli automatycznie - skrypty, czy chodzi o techniki manualnego code review?
Pyton_000
Codacy, SonarQube i wiele innych
Malinaa
Mam kod: KOD PHP

Gdzie do wykonania jest code review, czyli analiza kodu PHP
oraz przesłanie uwag o błędach i sugerowanych zmianach do naniesienia.
nospor
Jesli uzywasz github - to w githbu
Jesli uzywasz gitlab - to w gitlab
Jesli uzywasz czegos innego - to w tym czyms innym
Jesli nie uzywasz nic to wysylasz kod mailem do osob, ktore ci to sprawdza a one odpisuja
viking
Code review robi się zazwyczaj według standardów przyjętych przez wszystkich pracowników w firmie. Zależy też od polityki pisania testów np podejście nie testujemy dopóki to czegoś nie udowadnia.
Może pomóc: https://endler.dev/awesome-static-analysis/#php
Malinaa
Cytat(nospor @ 28.01.2020, 09:55:41 ) *
Jesli uzywasz github - to w githbu
Jesli uzywasz gitlab - to w gitlab
Jesli uzywasz czegos innego - to w tym czyms innym
Jesli nie uzywasz nic to wysylasz kod mailem do osob, ktore ci to sprawdza a one odpisuja


Nie używam Git'a (github) - jak go użyć do takiego "kawałka" kodu (z kosmosu)?
Stąd prośba nospor sprawdź mi ten kod.

viking Dzięki za info.
nospor


Uzywaj === a nie ==
Ten kod: (float) str_replace(',', '.', powinien poleciec do funkcji bo jest odpalany 1000 razy

Warunki z tak kobylastych IFow
if (numberOfDigitsAfterComma($data['clientDayRate']) > 6 || numberOfDigitsAfterComma($data['clientOver50Rate']) > 6 || numberOfDigitsAfterComma($data['clientOver100Rate']) > 6 || numberOfDigitsAfterComma($data['clientNightRate']) > 6 || numberOfDigitsAfterComma($data['clientOvernightRate']) > 6 || numberOfDigitsAfterComma($data['clientMonthRate']) > 6 || numberOfDigitsAfterComma($data['clientPieceRate']) > 6 || numberOfDigitsAfterComma($data['workerDayRate']) > 2 || numberOfDigitsAfterComma($data['workerMonthRate']) > 2 || numberOfDigitsAfterComma($data['workerPieceRate']) > 2
powinny poleciec do funcji


if (!empty($errors)) {
return $errors;
} else {

Ten ELSE jest zbedny. Unikaj zbednych zagniezdzen. To powinno byc tak:
if (!empty($errors)) {
return $errors;
}
// a tu kod co byl w ELSE


$idRate = $this->database->lastInsertId();
$rowID = $this->database->query('SELECT id_rate_labour
FROM rate_labour
ORDER BY id_rate_labour
DESC
LIMIT 1');
$rowID = $rowID->fetch();

PO co takie kombinacje? lastInsertId przeciez zwraca ci ostatnie ID. Po co jeszcze raz wyciagasz je zapytaniem?

Rzutuj wartosci do typow jakimi sa
$rowID = (int) $rowID->fetch();

NIe array() a []

Baza danych nie powinna byc inicjalizowana w tym serwisie, tylko do niego ewentualnei juz przekazana

czemu tak?
$rateData = [];
$rateData['client_day'] = $clientDayRate;
$rateData['client_night'] = $clientNightRate;
$rateData['client_other'] = $clientOtherRate;
$rateData['worker_day'] = $workerDayRate;
$rateData['worker_night'] = $workerNightRate;
$rateData['worker_other'] = $workerOtherRate;
$rateData['valid_start'] = $data['validStart'];
$rateData['valid_end'] = $data['validEnd'];

Nie lepiej
$rateData = [
'client_day' => $clientDayRate,
//.....
];

Cytat
Nie używam Git'a (github)
Czas najwyzszy zaczac. Krzywde sobie robisz bez tego
Pyton_000
phpstan i php-cs-fixer też pomogą
Malinaa
nospor Jak Ty to zrobiłeś? Naucz!
Próbowałem ręcznie, ale np. przy array() a [] stwierdziłem, że to jest to samo. Nie jest?
Po godzinie kombinacji stwierdziłem, że nie da się zrobić dobrze takiej analizy bez odpowiednich narzędzi.
Potrzebne korepetycje z Git'a wink.gif
nospor
Cytat
Próbowałem ręcznie, ale np. przy array() a [] stwierdziłem, że to jest to samo. Nie jest?

Dla php to bez roznicy. CHodzi o to,ze teraz poprostu uzywa sie wersji skroconej [] i juz smile.gif


Cytat
nospor Jak Ty to zrobiłeś? Naucz!

To i tak tylko pare rzeczy poprawilem. Prawdziwe fachury kazaly by ci to poprostu przepisac wink.gif
Tak czy siak chodzi o praktyke i posiadanie kogos lepszego od siebie, kto sprawdzi kod.
Poczytaj tez ksiazle "Clean Code" - przyklady odnosnie Java, ale wszystko praktycznie da sie przeniesc na php
Malinaa
Używałeś do tej analizy jakiś narzędzi, czy popatrzyłeś na kod (praktyka) i to wszystko? Jak z tym Git'em?
Jeśli tylko praktyka to niestety nie mam takiej, bo z każdą linią kodu coraz głębiej zakopywałem się.
W zasadzie na tyle dawno nie siedziałem w PHP, że dla mnie array() a [] to to samo, a używa się wersji skróconej.
Dzięki, że mnie wyciągnąłeś smile.gif
nospor
Narzedzi do analize tego kodu tutaj? Nie, wszystko bylo widac na gole oko.

Poprzednicy podali tutaj pare fajnych narzedzi. Zainteresuj sie nimi a na pewno pomoga

edit: z rzeczy ktore latwo zmienic a nie wiedziec czemu dopiero teraz zauwazylem to brak typowania. uzywasz php7? zacznij wink.gif
Malinaa
Chcę zapytać o:
Cytat
Baza danych nie powinna byc inicjalizowana w tym serwisie, tylko do niego ewentualnei juz przekazana


Jak się domyślam mowa tutaj o tym (jaki serwis, co masz na myśli)?

  1. public $database;
  2. public function saveNew($data, $idUser = 1) {
  3. $this->database = new PDO([
  4. 'pdo' => CRM::getDatabase(),
  5. 'host' => DATABASE_HOSTNAME,
  6. 'dbname' => DATABASE_BASENAME,
  7. 'user' => DATABASE_USERNAME,
  8. 'password' => DATABASE_PASSWORD,
  9. ]);


Nie wiem, czy ten kod masz na myśli, ale na moje oko od początku mi to nie pasuje.
Zastanawiam się, tzn. mam pytanie jak zrobić to dobrze?
Dawno klas nie pisałem, a tutaj jest i PHP obiektowe itd., nie znam takiego zapisu:
'pdo' => CRM::getDatabase(), co to jest?
Lord
Cytat(Malinaa @ 29.01.2020, 14:41:25 ) *
Chcę zapytać o:


Jak się domyślam mowa tutaj o tym (jaki serwis, co masz na myśli)?

  1. public $database;
  2. public function saveNew($data, $idUser = 1) {
  3. $this->database = new PDO([
  4. 'pdo' => CRM::getDatabase(),
  5. 'host' => DATABASE_HOSTNAME,
  6. 'dbname' => DATABASE_BASENAME,
  7. 'user' => DATABASE_USERNAME,
  8. 'password' => DATABASE_PASSWORD,
  9. ]);


Nie wiem, czy ten kod masz na myśli, ale na moje oko od początku mi to nie pasuje.
Zastanawiam się, tzn. mam pytanie jak zrobić to dobrze?
Dawno klas nie pisałem, a tutaj jest i PHP obiektowe itd., nie znam takiego zapisu:
'pdo' => CRM::getDatabase(), co to jest?


https://lukasz-socha.pl/php/wzorce-projekto...ency-injection/

nie najlepszy może przykład, ale to juź wpisz i poszukaj dependency injection w google
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.