Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [www]Proste forum - PHP bez frameworków.
smk
post 11.07.2018, 16:01:01
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 15.06.2018

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


Cześć.
Prosiłbym Was o opinię kodu, do którego link podrzucam niżej. Jest to proste forum - nie ma tu raczej jakiś rozbudowanych rzeczy, bo jest to mój pierwszy projekt w PHP, ale nawet pisząc takie coś, poznałem wiele nowych zagadnień wink.gif Chciałbym dowiedzieć się co należy poprawić w przyszłości. Jest to projekt bez frameworków do php. Struktura - brak podfolderów leży, ale nie chciało mi się już z tym mieszać smile.gif Poza tym wydaje mi się, że trochę pomieszałem rozbicie funkcji na klasy - na przykład komentarze w klasie postów. Dlatego dobrze gdybyście podpowiedzieli mi, co warto zmienić na przyszłość wink.gif

https://github.com/selfmadeking/simple-forum-php

oraz podgląd jak to działa (trzeba założyć konto, dowolny e-mail jakiś login i hasło (szyfrowanie password_hash hehe), aby mieć dostęp do forum - swoje posty, komentarze, sygnaturę można edytować):

https://imlimitless.000webhostapp.com/index.php

Dodatkowe pytanie - czy Waszym zdaniem to już czas, żeby próbować pisać coś z frameworkiem w php np. Symfony? Czy jeszcze coś napisać? Macie pomysł co? smile.gif

Pozdrawiam i krytykujcie jak się tylko da! smile.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Pyton_000
post 11.07.2018, 16:50:55
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Powiem ta. Nie jest tragicznie. Jest słabo ale nie tragicznie.

Dodam od siebie kilka uwag ogólnych bo o kodzie to można godzinami gadać. No to lecimy:
- PHP7 - to już powinna być podstawa. Ja wiem że bardzo dużo (90%) kursów jest na podstawie PHP5 no ale warto poszukać w necie na zasadzie "Co nowego w PHP7"
- namespace - to już jest od bardzo dawna standard. Pozwala Ci logicznie uporządkować kod.
- struktura plików i konwencje nazwenictwa. - Poczytaj sobie o PSR-0 i PSR-2 bo bardzo ułatwi Ci to pracę. Nie trzymaj wszytskich plików w 1 katalogu. Rozdzielaj je logicznie.
- Nie mieszamy HTML z PHP.
- Używaj spacji jako indentacji. Ja wiem że gówno-burza zaraz z tego wyjdzie ale jednak spacja to spacja - wszędzie wygląda tak samo.
- Staraj się eliminować zagnieżdżenia oraz zbędne instrukcje IF np:
Kod
if($stmt->rowCount() > 0)
            {
                return true;
            }
            else
            {
                return false;
            }

Na:
Kod
if($stmt->rowCount())
{
    return true;
}
return false;


- Dobrze że używasz PDO
- używaj Unsigned w kolumnach tam gdzie nie przewidujes wartości ujemnych.
- W metodach staraj się stosować zasadę odwróconej logiki. Chodzi o to że zamiast sprawdzać czy warunek jest OK i umieszczać całą logikę w bloku warto sprawdzić najpierw czy NIE jest spełniony. Przykład:
Zamiast
Kod
if(count($comments) > 0)
{
    foreach($comments as $comment)
    {
        $content = $comment['comment_content'];
        $user = $comment['user_name'];
        $comment_id = $comment['comment_id'];
        $dateConverted = new DateTime($comment['comment_date']);
        $date = ' | <span class="comment-date">' . $dateConverted->format('d.m.Y H:i') . '</span>';
        $html.= '<div class="comment">';
        $html.= '<p>' .  $content;
        $html.= $date . ' <a href="#">' . $user .'</a></p>';
        if($_SESSION['user_session'] === $comment['user_id'])
        {
            $html.= '<a href="deleteComment.php?id=' . $comment_id . '" title="Delete comment"><i class="fas fa-trash-alt comment-i"></i></a>';
            $html.= '<a href="editComment.php?id=' . $comment_id . '" title="Edit comment"><i class="fas fa-edit comment-i"></i></a>';
        }
        $html.= '</div>';
    }
return $html;
}
else
{
    return false;
}


Lepiej:
Kod
if(count($comments) === 0)
{
    return false;
}

foreach($comments as $comment)
{
    $content = $comment['comment_content'];
    $user = $comment['user_name'];
    $comment_id = $comment['comment_id'];
    $dateConverted = new DateTime($comment['comment_date']);
    $date = ' | <span class="comment-date">' . $dateConverted->format('d.m.Y H:i') . '</span>';
    $html.= '<div class="comment">';
    $html.= '<p>' .  $content;
    $html.= $date . ' <a href="#">' . $user .'</a></p>';
    if($_SESSION['user_session'] === $comment['user_id'])
    {
        $html.= '<a href="deleteComment.php?id=' . $comment_id . '" title="Delete comment"><i class="fas fa-trash-alt comment-i"></i></a>';
        $html.= '<a href="editComment.php?id=' . $comment_id . '" title="Edit comment"><i class="fas fa-edit comment-i"></i></a>';
    }
    $html.= '</div>';
}
return $html;

Prawda że czytelniej? smile.gif

To tak na razie. + to co @nospor napisał odnośnie redukowania warunków (tam gdzie sprawdzasz czy pusty itp.)
Go to the top of the page
+Quote Post
markonix
post 11.07.2018, 23:01:04
Post #3





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Cytat(Pyton_000 @ 11.07.2018, 17:50:55 ) *
- Staraj się eliminować zagnieżdżenia oraz zbędne instrukcje IF np:
Kod
if($stmt->rowCount() > 0)
            {
                return true;
            }
            else
            {
                return false;
            }

Na:
Kod
if($stmt->rowCount())
{
    return true;
}
return false;


  1. return $stmp->rowCount() > 0;

albo:
  1. return (bool)$stmp->rowCount();

smile.gif


--------------------
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Wersja Lo-Fi Aktualny czas: 24.06.2024 - 16:51