Niestety trochę błądzisz, ale moim zdaniem to bardzo dobra decyzja, że próbujesz coś napisać samodzielnie zamiast uczyć się frameworka. Frameworki niestety uczą złych nawyków jeśli nie umiesz w porządne OOP.
To od czego bym zaczął na Twoim miejscu to composer. Composer dzisiaj to jest standard w każdym projekcie i warto go użyć już teraz choćby po to aby mieć autoloader.
Druga rzecz to PSR - pisałeś, że czytałeś i starasz się stosować, ale w kodzie tego zupełnie nie widać... Polecam zainstalować php-cs-fixer i odpalić w projekcie, a potem zobaczyć sobie jakimś diffem co zostało zmienione.
Mamy PHP 7.3, a w twoim klasach tego nie widać - nie ma typowania parametrów funkcji, typów zwracanych itp.
Z takich pierdół unikaj jak ognia stosowania if... else, a jeszcze bardziej zagnieżdżania ifów bo to zło wcielone.
Takich rzeczy jak to nie da się czytać
Kod
public function checkCredentials($data){
$this->connection->query("SELECT * FROM uzytkownicy WHERE nick=:nick");
$this->connection->bind(":nick",$data['nick']);
$this->connection->execute();
if($this->connection->rowCount()>0){
if(password_verify($data["password"],$this->connection->singleResult()->haslo)){
$this->isLoged=true;
return $this->isLoged;
}else{
$this->error="Incorect nick or password";
}
}else{
$this->IsError=true;
$this->error="Incorect nick or password";
}
}
Zobacz o ile czytelniejsza byłaby ta funkcja po refactorze (użyłem wyjątków, ale możesz tu wstawić swoją logikę ze zwracaniem false itd):
Kod
public function checkCredentials(array $data): bool
{
$this->connection->query("SELECT * FROM uzytkownicy WHERE nick=:nick");
$this->connection->bind(":nick",$data['nick']);
$this->connection->execute();
if($this->connection->rowCount() == 0) {
throw new \Exception('User not found');
}
if(!password_verify($data["password"], $this->connection->singleResult()->haslo)) {
throw new \Exception('Incorect user or password');
}
$this->isLoged = true;
return true;
}
Wewnątrz konstruktora (i ogólnie klas) nie powinieneś używać new bo to jest ukrywanie zależności. W dobrym kodzie wszystkie zależności powinny być wstrzykiwane w konstruktorze. Ale to może być dla Ciebie trudne gdy bo nie ogarniasz jeszcze zapewne wzorców projektowych typu fabryki, czy Dependency Injection. Niemniej postaraj się gdzie dasz radę raczej tworzyć klasy bez używanie w ich kodzie new. Czyli przykład:
Kod
/**
* Źle
*/
public function __construct()
{
$this->connection = new Database();
}
/**
* Dobrze
*/
public function __construct(Database $connection)
{
$this->connection = $connection;
}
W php do komentarzy funkcji stosujemy php doc block, a jeszcze lepiej typowanie inputu/output + doc block jako uzupełnienie (np. o rzucane wyjątki, typu elementów w tablicy itp).
Jeśli myślisz na poważnie o kodowaniu, to zacznij w 100% stosować angielski - czemu funkcje są po angielsku, a baza po polsku? Pokracznie to wygląda.
To chyba na początek tyle.
Jak to ogarniesz to na Twoim miejscu spróbowałbym przerobić jakiś tutorial MVC żeby zrozumieć jak wygląda architektura prostej aplikacji w PHP. Robiesz bardzo wiele błędów i masz ogólnie źle zorganizowany kod. Przerobienie dobrego tutoriala na pewno pomoże.
Ogólnie szału nie ma, ale każdy kiedyś zaczynał, a widać że czytasz i starasz się rozwijać, więc to dobrze wróży. Już samo używanie gita i githuba na Twoim poziomie to bardzo dobry znak.Trzymam kciuki.